V9.19β8No.10989
秀丸担当 さん 22/08/31 16:57
 
V9.19β8を公開しました。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm919b8_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm919b8_x64_signed.exe

[ ]
RE:10989 V9.19β8No.10990
こみやんま さん 22/08/31 18:36
 
hidemaru.run ですが、runProcessとかの名称にしておいたほうが良いかと思います。

結局受け口は、processID や processInfo などプロセスというワードが意識されて
いますし、nodejsや他プログラミング言語でも基本的には
これ系は、runではなくprocessというワードが使われたクラスや関数等になっていま
す。

というわけで、秀丸マクロのrunとの同類と匂わせつつ、Processというワードも入れ
るという意味で、

```
hidemaru.runProcess(...)
```

・hidemaruGlobalとの衝突も避けつつ、
・マクロのrunと同類と匂わせつつも、
・Processというワードもいれこむ


[ ]
RE:10990 V9.19β8No.10997
秀丸担当 さん 22/09/01 17:53
 
hidemaru.runは、execとかshellExecとかcreateProcessどうしようか迷っていました
が、runにしてみています。
それほど理由があったわけではなかったですが、今になって考えたら、crateobject
がhidemaru.createObjectとか、loaddllがhidemaru.loadDllと似たパターンで、同名
でありつつオブジェクトを返す方式に揃っているのがいいような気がしてきました。
グローバルに展開していないのと、%の記述が少し違いますが、1つのパラメータだ
けであれば、exe名+コマンドライン引数の1つの文字列で同じ感じでいけそうでした。


[ ]
RE:10997 V9.19β8No.10998
こみやんま さん 22/09/01 18:51
 
うーん、
「loadDll」と「createObject」はグローバルに展開されていて、
さらに「loaddll」と「createobject」も同機能としてグローバルに存在してと、

グラグラしているように思えます。

setVarとgetVar は実践的なものを使い始めたり、
マクロで作られたものとの海苔付でかなり頻繁に利用されそうだからわかりますが、

それ以外はグローバルにしなくていいのでは。。。

loaddllとcreateobjectがあるのに、同一関数を指すloadDllとcreateObjectまでさら
に追加でグローバルに展開する理由が見当たらないというか...

[ ]
RE:10998 V9.19β8No.10999
こみやんま さん 22/09/01 19:11
 
getVar
setVar
evalMacro
evalJs

この4つを秀丸マクロのeval(存在しないhidemaruGlobal.eval(...))や周辺をつとめ
る4関数とみなして、これらはf==1の時、グローバルに出して、

他は、f==1であったとしても、
hidemaru.**** の形でのみアクセス可能と
指針を固定した方がいいんじゃないでしょうか。
(引っ込めるという方針であれば)

hidemaruGlobalでもないものが、「基準不明」なまま
グローバルに出たり出なかったりしていては、
「なんでこれは使えるのだろう」「あぁ、hidemaruGlobalにあるに違いない⇒無い」
 なぜだろう、とかになっていくかと思いますよ。

今はまだ無いですが、全部小文字の hidemaru.method(...)みたいなのが
出来て、methodみたい全部小文字のものが「グローバル」に出ていたりすると、
一気に「どちらに属するのか」判断が難しくなっていくかと







[ ]
RE:10999 V9.19β8No.11001
秀丸担当 さん 22/09/02 11:08
 
最初の考えとしては、createobjectとloaddllだけが使えればいいです。
これはJavaScript向けの仕様変更のつもりで、hidemaruGlobalにあるものが展開され
ていると解釈してもいいようなものですが、find文がfind1()になるといったような
変更とは違って、ざっくりと変わるので特別な存在です。
setVarとgetVarは、使い方によると思いますが、自分としてはそれほど必要性を感じ
ないというか、大量の変数を相互に使い合うということはあまりなく、setstaticvar
iable/getstaticvariableのような感覚で、つなぎ目の入出力に使う程度なのではな
いかと思います。個人的にはhidemaru.setVar、hidemaru.getVarでもいいような…
evalMacroは、evalが被るので、それを避けるものです。evalJsはevalだけだとどっ
ちかわからないので、区別をつけるものです。find文がfind1()になるようなものです。
loadTextFileは、展開しなくてもよかったですがなんとなく入れてしまいました。
これらはだいたいWebView2でなくてもよくて、マクロ文法をJavaScript文法で書けた
ら楽というようなものです。

一方でhidmaru.runは、全然別で、別スレッドでも言われていたようにstdin/stdout
を常時コネクトしたままサーバー/クライアントみたいなやりとりもできたらいいも
ので、非同期で、WebView2向けで、新規のものです。
最初はcreateProcessとかにしようとか考えていたりして、そういうのでもよかった
です。
ですがなんとなくrunにしてみて、ご指摘を受けてよく見たら、外部プログラムとの
やりとりがcreateobject,loaddll,runとなって綺麗だなあと思ったところです。

ですが基準は一応こみやんまさんのご意見を尊重して、setVarとgetVarは重要位置づ
けとして、グローバルの記述のヘルプには展開と明記しています。
createobjectとloaddllはどっちにもあるのは良くないので特別に展開というご意見
とは逆ですが、hidemaru.createObject、hidemaru.loadDllに変更という位置づけに
変更(ヘルプ上の話)していて、createobjectとloaddllの展開は、正式になる初っ
端からdepreatedみたいなものです。
evalMacroは被りを避けるものだから、hidemaruオブジェクトの展開基準で明確なの
は事実上setVar, getVarだけということになると思います。


[ ]
RE:11001 V9.19β8No.11002
こみやんま さん 22/09/02 12:02
 
>setVarとgetVarは、使い方によると思いますが、自分としてはそれほど

setVarやgetVar も hidemaru.setVar, hidemaru.getVar にするという方針もありで、
現状だとその方がわかりやすいかと思います。


hidemaru 側とはどういった性質のものが入っているのか、
hideamruGlobal 側とはどういった性質のものが入っているのか
なぜグローバルになっているのか分かりやすいのが良いと思います。

hidemaruGlobalには現在2つの意味があります。
1)デフォルトだとグローバル関数として展開される
2)loaddllとcreateobjectを除いては、非同期中は利用できない。

----------------------------------------------------------------------------
----

「hidemaru.**** からグローバルにしているものは全部引っ込める」とかも
全然有りで、今のところ、そっちの方がわかりやすいと思います。

以下のようにするのはどうでしょうか。
(o)とあるやつだけ、グローバルに出す。


if(f){
 (x) getVar = gv;
 (x) setVar = function(s,v){return hidemaru.setVar(s,v);};
 (o) evalMacro = evm;
 (o) evalJs = function(s){return eval(s);};
 (x) createObject = hg.createobject;
 (x) loadDll = function(s){return hidemaru.loadDll(s);};
 (x) loadTextFile = function(s){return hidemaru.loadTextFile(s);};
}

----------------------------------------------------------------------------
----

evalMacroとevalJsがグローバルにあるのはある種、特別な事情があるといえるでし
ょう。

1)本来は、hidemaru.eval という「秀丸マクロにあった関数」に対応する関数だか
ら、いずれかの形で対応関数をグローバルに出す。

2)名前被りの問題
  「秀丸マクロにはeval」がある。よってこの「秀丸マクロのeval相当」に対応す
る何らかの関数は、
  f==1ならば、グローバルに出すのよい。
  本来ならば、hidemaruGlobal.evalがあるべきであるが、
  そのままだと元々javascriptにあるevalと衝突するため、hidemaruGlobal.eval
ではなく、別名にする必要があった。

3)「HidemacJsGlobal.js」の構築依存順の問題
  1)のように別名を作ればそれで解決なのではあったが、しかしながら
  そもそも、hidemaruGlobal.*** にある関数群の構築には、hidemaru.evalMacro
など、
  なんらかのevalMacro的なものが必要であった。
  hidemaruGlobal を構築するものが、hidemaruGlobal に入っているのは変なので
  hidemaru.evalMacro とした。
  そして、これをそのまま、(元来あるはずだった)hidemaru.eval の代用とした

4)結果として、JavaScriptに元々あったevalが hidemaru.eval からのグローバル
なのかどうなのかの迷いを避けるため、
  (絶対必要なわけではないものの、書き手や読みてがevalMacroとの名称的対比が
あった方がわかりやすかろうという意味で evalJs を JavaScriptのevalと同じもの
として用意した)

[ ]
RE:11002 V9.19β8No.11003
こみやんま さん 22/09/02 12:11
 
ちなみに1つ前の投稿とは真逆の意見になってしまいますが、
私がわかりやすいと思っていたのが以下の方針でした。

■hidemaruGlobalは、f==1の時、全てグローバルに出す。
・hidemaruGlobalには「全て小文字の関数」と「全て大文字」の関数しか存在しない。
 即ち、キャメルで途中で1つだけ大文字などという関数は存在しない。
・これらの関数群は原則的には「非同期中は使えない」


■hidemaruはf==1の時、全てをグローバルに出す。
・hidemaruには「頭小文字のキャメルケース」が採用されており、
 かつ、必ず1持ちは大文字が入っている。
 (runProcessを提案したのはこの意味もありました)
・これらの関数群は、原則的には「マクロ実行中であるか否かに拘わらず」使用出来
る。
 
 

[ ]
RE:11003 V9.19β8No.11004
秀丸担当 さん 22/09/02 16:22
 
グローバル展開の話はほどほどにして、肝心なのは同期と非同期の区別だったという
気がします。
2単語の大文字入りキャメルケースが非同期っぽいですがそうでもなく、hidemaruGl
obalが全部だめなのはいいですが、hidemaruオブジェクトのほうは、1つ1つについ
て、これは使えるこれは使えないと書いておいたほうがよさそうです。
Hidemaru_*にあるsetStaticVariable等、他のものも追加していきます。

[ ]
RE:10989 V9.19β8No.11005
h-tom さん 22/09/04 13:49
 
h-tom です。

1)ゼロ幅のカラーマーカー部分ですが colorcode でカラーマーカーのビット(0x0008
0000)があると思ったら、
  0x00100000 が返ってきましたが、これは仕様でしょうか?
 
  ゼロ幅だとgetcolormarker の取得方法が変わってくるので、区別できるほうが便
利といえば便利かな?
 
  //確認用マクロ ここから
  newfile;
  gofiletop;
  //colorcode は改行コード上は0を返すので適当に入力
  insert "aaaaa";
  insertreturn;
  //先頭にゼロ幅のカラーマーカーをつける。
  colormarker 0x000000FF, 0x0000FF80, 0, 0x02, 0, "", 1, 0, 1, 0;
  //先頭に移動
  gofiletop;
  //colorcode取得
  message sprintf("x:%d y:%d colorcode:0x%08x", x, y, colorcode);
  endmacro;
  //確認用マクロ ここまで
 
  結果
  ---------------------------
  秀丸エディタ
  ---------------------------
  x:0 y:0 colorcode:0x00100000
  ---------------------------
  OK  
  ---------------------------

2)ゼロ幅のカラーマーカーがある箇所で「各種情報表示マクロ」を実行すると、秀丸
エディタがクラッシュする。
  (静かに秀丸エディタウィンドウがいなくなる)
  「各種情報表示マクロ」は http://htom.in.coocan.jp/macro/tips_main.html#label-8
 です。
  何故か、デバッグ出力部分を有効にしておくと問題ないです。
 
  ntdll.dll 内なので、難しいかもしれませんが報告まで。
 
  障害が発生しているアプリケーション名: Hidemaru.exe、バージョン: 9.1.9.8、
タイム スタンプ: 0x630eda20
  障害が発生しているモジュール名: ntdll.dll、バージョン: 10.0.19041.1949、タ
イム スタンプ: 0xfe96c48e
  例外コード: 0xc0000374

[ ]
RE:11005 V9.19β8No.11006
秀丸担当 さん 22/09/05 12:05
 

ご指摘ありがとうございます。
ゼロ幅のカラーマーカーは、通常のカラーマーカーとは違って、colorcodeは0x00100
000となるようにしてありました。
ヘルプにそのことも追記しようと思います。

ゼロ幅のカラーマーカー上での、h-tomさんのマクロを実行して試してみたところで
はこちらでは問題は再現できなかったのですが、カラーマーカーの取得関係で何か問
題があると思われます。
調べて対策して修正します。

[ ]
RE:11006 V9.19β8No.11007
h-tom さん 22/09/05 21:18
 
h-tom です。

>ヘルプにそのことも追記しようと思います。
お願いします。

>調べて対策して修正します。
昨日は確実にクラッシュしましたが、今日は5回に1回程度になりました。
こちらの環境が悪いかも。

しばらく、ゼロ幅カラーマーカー関連をマクロから操作してみるので、何かわかれば
連絡します。

[ ]
RE:11007 V9.19β8No.11008
h-tom さん 22/09/05 23:46
 
h-tom です。

>しばらく、ゼロ幅カラーマーカー関連をマクロから操作してみるので、何かわかれ
>ば連絡します。
ゼロ幅カラーマーカーは関係なかったかも。
静的な変数関連?
(ゼロ幅カラーマーカーをつけるために範囲選択マクロで静的な変数使ってた)

OS:Windows10 21H2(19044,1949) x64
秀丸エディタ:Ver.9.19β8 x64

下記マクロを実行すると、デバッガに出力され正常にマクロを終了しているように見
えますが、秀丸エディタウィンドウが閉じてしまいます。
(イベントビューアで見るとクラッシュしてる)
ただ、同じPC上の持ち出しキット(ほぼノーマル状態)で実行すると、秀丸エディタウ
ィンドウが閉じることはないです。

別PCの Windows11 21H2(x64)/秀丸エディタ Ver.9.19β8 x64 だと、Windows10 と同
じく秀丸エディタウィンドウが閉じてしまいます。
(イベントビューアで見るとクラッシュしてる)

Windows11 の秀丸エディタも、ほぼ初期状態なので、32bit/64bitの違い?
検索エンジンは、hmjre.dll でも同じ(クラッシュしてる)なので、関係なさそうです。
そちらで再現できればいいのですが。

// サンプルマクロ ここから
newfile;
gofiletop;
debuginfo 1;
setstaticvariable "a", "1", 0;
setstaticvariable "b", "2", 0;
setstaticvariable "c", "3", 0;
$list = getstaticvariable("", 0);
call add_item "$list=" + $list;
if($list != ""){
 #n = split($a, $list, ",");
 call add_item "#n:" + str(#n);
 #cnt = 0;
 call add_item " 個 数:" + str(#n);
 while(#n > #cnt){
  call add_item " 変数名:" + $a[#cnt];
  call add_item "   値:" + getstaticvariable($a[#cnt], 0);
  #cnt = #cnt + 1;
 }
}
endmacro;
add_item:
debuginfo $$1 + "\n";
return;
// サンプルマクロ ここまで

[ ]
RE:11008 V9.19β8No.11009
秀丸担当 さん 22/09/06 09:22
 
詳しい情報ありがとうございます。
大変助かりました。
こちらでも再現させることができました。
調べてみたところ、静的変数無しでも、split関数を使うこと自体が、ただそれだけ
で問題でした。
次のβ版で修正させていただきます。
V9.18β5での問題でしたが、V9.18正式には反映されておらず、V9.19β相当のことで
した。

[ ]