hmV8とjsmode

グローバルの記述

常にHidemaruGlobalのメソッドがグローバルに展開されていて、ほとんどのマクロの文、マクロのキーワード、マクロの関数を、だいたいそのままで表記できるようになっています。(一部例外はあります)
文でもキーワードでも関数でも、全て関数の書き方(メソッドの書き方)になります

message( "Hello jsmode global" );
insert( filename2() );
moveto( 10, 20 );
message( question( "y/n?" ) );

hmV8にはjsmodeと同じ関数のほとんどが実装されています

この機能を利用する場合、秀丸エディタ v8.98 (正式版 or β9以上)を強く推奨します。
そうでない場合、数値と文字列の型を間違えて実行すると秀丸が不正な状態となります。

  • JavaScript側のソース

    コード
    message("OK");
    var r = input("ええええ", "おおおお");
    message(r);
    
    var selected_id = menu("あいうえお", "かきくけこ");
    hm.OutputPane.Output(selected_id + "番を選択しました\r\n");
                

jsmodeとは異なるもの

Dll読み込み関連

DLL読み込み関連は、「loadDllなど、jsmode独特のDllマネージ機能」は実装されていません。
こちらについては、後述のように、hidemaruCompatを使うことで、

秀丸マクロと同一の使用感の関数群がすべて使用できます。

COM読み込み関連

COM読み込み関連は、「createObjectなど、jsmode独特のcreateObject」は実装されていません。
こちらは、普通にhmV8では、.NETのdllが読み込めるため、そちらの機能で対応したほうが自然な実装となりエレガントでしょう。
hidemaruCompat内のCOM関係には、

  • createobject
  • member.rnum (member関数と同じだが、数値を返す)
  • member.rstr (member関数と同じだが、文字列を返す)
  • keepobject
  • releaseobject
  • setcomdetachmethod

のみが用意されています。

hidemaruCompat
  • JavaScript側のソース

    コード
      for(var f in hidemaruCompat) {
          hm.OutputPane.Output(f + "\r\n");
      }
      
     
      with(hidemaruCompat) {
          var dll = loaddll( currentmacrodirectory() + "\mytest.dll");
          
          var ret = dllfuncstrw(dll, "MyFunc", 3, "10");
    
          hm.OutputPane.Output(member.rstr + "\r\n");
          hm.OutputPane.Output(member.rnum + "\r\n");
          
          freedll(dll);
      }
      

非同期関連

jsmodeの非同期関連、例えば、postExecMacroFileやpostExecMacroMemoryは実装されていません。
こちらはJavaScriptでの記述にはやや難がありますので、
常駐コンポーネントを作るのに適した、hm.NETや、Hm.NetCOMを利用することをオススメします。

currentjsfilename

execjsで動作するわけではないため、currentjsfilenameは機能しません。
(常にcurrentmacrofilenameと同じものを返します)

一般的な文/キーワード/関数

後述の書き方が変わるものやサポートしていないもの以外は、文/キーワード/関数をそのままの名前で、パラメータ全体に()を付けるだけでメソッドとして使用可能です。
同じ名前でありながら文/キーワード/関数で用途が違うものがありますが、パラメータの指定が適切であれば()を付けるだけでいいです。
キーワードで[]で表すようなものも、()にすればできます。
文の結果コードはresult()でも取得できますが、関数の返り値としても取得できます。

a = filename2();
a = searchbuffer(); b = searchoption();
up();
a = x(); b = y();
moveto( a, b );
message( "abc" );
s = selecting() ? gettext(seltopx(),seltopy(),selendx(),selendy()) : ""; //とにかく()を付ける       
r = question( "y/n?" ); //result()は返り値でもOK

//同じ名前ものはパラメータが適切ならOK
a = overwrite();
overwrite( "abc" );
a = toupper( "Abc", 0x01 );
toupper(0x01);
a = filter( "", "ToUpper", "", "Abc" );
filter( "", "ToUpper", "" );

//[]は()でOK
a = linelen2( 10 );
a = filename2( 1 );

moveto( x()+1, y() );  //OK
moveto=123;  //movetoを上書きしてしまう
moveto( x()+1, y() );  //movetoが働かなくなってしまう

()を付けずに関数名だけで書いてしまう場合、エラーにならないので注意が必要です。
同名の変数として上書きしたりすると、使用できなくなってしまうので注意が必要です。

copy; //エラーにならないので注意
copy();

moveto( x() + 1 ,y() );
x = 2; //関数xを書き換えできてしまう
moveto( x() + 1, y() ); //x()ができなくなってしまうので注意

jsmodeとの互換のために

hidemaruGlobalオブジェクトには、グローバルに展開されるものと同じ関数があります。
グローバルに関数が展開されていると、誤って上書きしてしまう可能性がありますが、hidemaruGlobalオブジェクトを使うことができます。

他に展開されているメソッド

HidemaruオブジェクトのsetVar, getVarなどもグローバルに展開されていて、省略してそのまま使えます。
evalは紛らわしい書き方を避けるため、evalMacroの展開と、evalJsがグローバルに作られます。

setVar("$a","abc");         // hm.Macro.Var["$a"] = "abc"と同じ
a=getVar("$a");             // hm.Macro.Var["$a"]
evalMacro('message "a";');  // hm.Macro.Eval('message "a";');
evalJs('var a=123;');       // JavaScriptのevalと同じ

書き方が変わるもの

openfileやsearchdown等の予約語パラメータは、数値

openfile等の予約語パラメータはencode相当の数値になります。
searchdown等の予約語パラメータはsearchoption相当の数値になります。

COM関係、dllfunc関係

dllfunc関係については、上述にあるhidemaruCompatオブジェクト内のメソッドを利用してください。
COM関係については、hidemaruCompatにも最低限のメソッドはありますが、
基本的には、.NET経由としてdllをロードするか、.NETのメソッドを使ったほうが楽でしょう。

getconfig、getconfigcolorでできるキーワード

getconfigでできるキーワードの多くはサポートせず、getconfigで取得します。
getconfigcolorでできるキーワードはサポートせず、getconfigcolorで取得します。
fontname()とfontsize()だけはキーワード相当でも可能です。

パラメータで受け取る関数

getlinecount、enumregvalueは返り値の他にパラメータで結果を受け取る特殊な使い方ですが、オブジェクトを渡して結果を受け取ります。

JavaScriptとの関数名衝突の都合上、関数名等が変更、もしくは不要だったもの

delete文はdel()、find文はfind1()、replace文はreplace1()、escape文はescapeselect()に名前を変更しています。
encodeURI、decodeURI、split、joinは、JavaScriptにあらかじめあるものを使います。

サポートしないもの

以下のものは()を付けるだけの書き換えする方法はサポートしません。

execmacro js execjs jsmode call refcall
setactivehidemaru nexthidemaru prevhidemaru nexthidemaruicon prevhidemaruicon nexttab prevtab
GREP FIND ENV

COM関係
(getobject callmethod
 callmethod_returnstr callmethod_returnnum callmethod_returnobj
 getpropstr getpropnum getpropobj setpropstr setpropnum setpropobj
 getcollection allowobjparam setcomdetachmethod)

getconfigでできるキーワード
(fontcharset boldstate width kinsokustate correctlineno linespace freecursor tabcount indentstate 
 showtab showruler tabruler linenostate pagestate formwidth
 hilightstate hilighttitle savewitheof ignoreeof backup)

getconfigcolorでできるキーワード
(tcolor bcolor lcolor ccolor rcolor rulercolor rulerbackcolor)

encodeuri decodeuri split join

DDE関係全部
return(キーワード) true(キーワード) false(キーワード)
yes no eof