1 件の投稿を表示中 (合計 11 個)
  • 作成者
    投稿
  • #4090
    takuya
    参加者

    マクロに対して使いまわせるところを使いまわしたいので、CでいうところのInclude(ですよね) Java/JScriptでいうところのImport PHPでいうところのrequire 関数を作成していただけるとうれしいです。

    import で多重importの無駄がおきないように、一度Importしたファイルが別のImportで2重インポートが防げれるように実装していただけると、さらにうれしいです。

    Importがあれば、ShuheiさんがおっしゃっているDOM関連の実装をEmeditorユーザーで作り上げることも可能かと存じます。

    #4093
    ShuHei
    メンバー

    takuyaさんは書きました:
    Importがあれば、ShuheiさんがおっしゃっているDOM関連の実装をEmeditorユーザーで作り上げることも可能かと存じます。

    因みに私のほうはマクロ側からより低レベルな
    処理を実行したいので、DOMを拡張できたらなーと思っています。

    マクロ側でテキストの取得やキャレットの移動などをやろうとするとどうしても冗長になってしまったりするんですよね。

    自分達でDOMを拡張できるのであれば、
    そういったボトルネックも解消できるかと思いますし、後々にそういった自由性が新たなemeditorの強みになるかもしれません。
    (素人考えですので変な所もあるかもしれませんが。)

    あと、個人的にJavascriptの言語構造でrequireなどの
    機能がないのはemeditor側ではどうしようもないような気がします・・・

    #4094
    takuya
    参加者

    >因みに私のほうはマクロ側からより低レベルな
    処理を実行したいので、DOMを拡張できたらなーと思っています。

    DOM実装ってdocument.getElementsByTagNameNS();みたいなモノですよね。低レベルなDOMの拡張って?もうすこし詳しく知りたいです理解できて無くてすいません。

    拡張ってEmEditor内蔵のDocumentオブジェクトをWRAPするdocumentオブジェクトをマクロ側で定義して、それを毎回Importすれば出来るんじゃないかなと。(重いけど・・・)
    こういうのをWikiなりオープンな場で作って共有できれば良いのじゃないかなと思ったのですが。

    //基本的なオブジェクトを拡張する BASE.js
    var _document = {
    keyPress : function(key){
    var shell = new ActiveXObject(“WScript.Shell”);
    shell.SendKeys( key );//key={F5}, key={A}…
    },
    Caret : {
    move : function(x){//負なら左へ、正なら右へ移動
    if( x <0 )
    this.selection.CharLeft(x);
    else
    this.selection.CharRight(x*-1);
    }
    }
    onSave :function(x){}
    }
    Object.extend( window.document, _document );

    これを使って

    Editor.ImportSrc( “BASE.js” )
    //なんか処理

    こんな感じで出来ないかな。

    >あと、個人的にJavascriptの言語構造でrequireなどの
    機能がないのはemeditor側ではどうしようもないような気がします・・・

    JScript.netには.netFrameWorkをImportする機能があるんだけど。あれってマクロの再利用とは、また違うのかな。たしかに言語構造的には無理だよねぇ。でも組み込みObjectの関数で用意していただけると使える気がする。先の例でのEditor.ImportSrc()みたいな感じで。

    個人的にはeval()するだけのrequire()でもいいからあると楽かなぁと思う。

    #4095
    snow
    参加者

    Cのincludeのように、実行する前にプリプロセッサを動かせれば。

    #4101
    ShuHei
    メンバー

    拡張ってEmEditor内蔵のDocumentオブジェクトをWRAPするdocumentオブジェクトをマクロ側で定義して、それを毎回Importすれば出来るんじゃないかなと。(重いけど・・・)
    こういうのをWikiなりオープンな場で作って共有できれば良いのじゃないかなと思ったのですが。

    恐らくマクロ部分を拡張するとなるとEmeditorの
    DOMに属する形になると思うのでああいう表現にさせていただきました。

    文字列を走査するとかのコストがかかる処理なんかは
    C側で実装できたら便利そうだし、マクロ側からもっと
    簡単に色々なことが出来るんじゃないかなーっていう
    位です。

    例えば指定URLの中身を拾ってくるWindow.Extension.get_url()という関数をCで定義できたらどのActiveScriptからでもWindow.Extension.get_url()をコールするだけで簡単に中身が拾える!とか、色々応用は出来そうですよね。

    まぁ、プラグイン側でやりゃ解決する事なんですが。
    プラグインを作れる人は限られてしまいますからねぇ・・・

    でも組み込みObjectの関数で用意していただけると使える気がする。先の例でのEditor.ImportSrc()みたいな感じで。

    Editor.importSrc(“hoge.jsee”);
    とか書いておくとマクロの実行前にhoge.jseeの中身を
    読み込んでからActiveScriptに渡してくれるのであれば出来そうですよね
    (恐らくもっと効率よい方法があるかと思いますが。)

    #4106
    Yutaka Emura
    キーマスター

    C言語の #include のようなものを追加したいと思っていますが、いかがでしょうか?

    #4920
    takuya
    参加者

    β版でも新バージョンでも搭載予定無しでしょうか?
    ScriptControl側にEvalを付加してくれるとソコソコ動作するのですが、EmEditorのマクロエンジン側に実装して貰えると嬉しい。

    var engine = new ActiveXObject(“ScriptControl”);
    engine.Language = “JScript”;
    js = engine.CodeObject;
    WScript.Echo( js.eval(“aa=1”) );
    WScript.Echo( js.aa );

    上記のEval部分を 外部ファイルのSRCコードにして欲しいのですが。。。

    #include “sample.js”
    alert(“test”);

    とEmEditorマクロを書けば、実行時にスクリプトエンジンに
    追記されると嬉しいです。

    仰られるように、
    #include
    構文を実行前に固定コードへ展開しても良いと思います。

    #4957
    Aye Wong
    メンバー

    マクロをいろいろ書いているとライブラリ機能は欲しくなってきますね。

    いずれにせよ、マクロエンジンにファイル内容を渡す前に、エディタ側でテキストを読んでいる実装だと思いますので、私もシンプルにエディタ側が#includeや#importでテキスト内容を展開する実装がよいと思います。
    賛同の上+一票

    #4959
    palazzo
    メンバー

    VBSやJSのインクルードなら、ネットを検索していると、いくつかそれらしいものにヒットしますが、関数のみのVBSやJSをExecuteメソッドやevalメソッドで読み込むのはダメなのでしょうか?

    inc.vbs
    Sub Test
    MsgBox “Hello”
    End Sub

    main.vbs
    Execute CreateObject(“Scripting.FileSystemObject”).OpenTextFile(“inc.vbs”, 1).ReadAll()

    Call Test()

    inc.js
    function test(){
    new ActiveXObject(“htmlfile”).Script.alert(“Hello”);
    }

    main.js
    eval( new ActiveXObject(“Scripting.FileSystemObject”).OpenTextFile(“inc.js”, 1).ReadAll() );

    test();

    #4981
    takuya
    参加者

    FSOでも良いのですが、EmEditor側にある方が、エディタのマクロとして自然かなと思ったりします。

    #include “http://hoo.baz/foo.js&#8221;
    //↓展開
    var ld = WScript.CreateObject(“WSH.SubScriptLoader”);
    ld.load(“http://hoo.baz/foo.js&#8221;, this);

    #includeをエディタがマクロ実行前に展開するだけだし。。。
    あまり難しいことではないような気がする。

    作者さんのポリシー次第かなと思ってる。

    #4991
    ShuHei
    メンバー

    気分的な問題というのがひとつと、
    デバッグする時追うのが面倒なのでevalは余り使いたくありません。

    最近は標準で使えるスクリプトエンジンを採用するメリットの方が大きいと思うようになったので、言語的な制約は諦めるようになりました。

    使い勝手が悪ければ他のでやれば済みますから、ね。

1 件の投稿を表示中 (合計 11 個)
  • このトピックに返信するにはログインしてください。