Ver 2.0.6.3803 検証

  1. Kuroさんいつもありがとうございます。体調にはご自愛なされますように。
    前Verでの検証漏れもあり新しいスレッドを立てるのは、もうしわけない気はするのですが...

    [影響大]
    ●Editor.OpenFile の第2引数の指定が効きません。常に ActiveDocument の Encoding で開かれます。
    ●Document.Selection.SetActivePoint で第1引数に mePosLogical  を指定したときの飛び先が論理位置になりません。

    [影響小]
    ●meFormatJoinLines が未定義です。document.selection.Format(4);は動作します。

    [仕様関連]
    ●[ツール(T)] → [オプション(O)] → [基本]タブ→[閉じるボタン]の設定が SDI にも 影響しています。「無し」にしないと、Document を閉じたときに別の新規ドキュメントが開きます。
    ●window.ScriptFullName が「選択」されているマクロファイル名でなく「実行」しているマクロファイル名を返すようになりました。/mfオプションと合わせてマクロの可能性が広がります。かなりうれしい。

    Ver 2.0.5.3717の報告での修正点は無事に動いています。
    仕様でSDI から別ドキュメントの操作ができなくなったのは悲しいですが、 下のやっつけマクロで対応可能です。
    //----------
      /*
      * Mery Ver2 の SDIモード では editor.documents.count は常に 1 を返し
      * マクロで別ドキュメントを開いても ActiveDocument は切り替わらない。
      * 別ドキュメントを操作するには一時的にタブ表示モードに変更する。
      */
      // 描画停止
      Redraw = false;
      //SDIモードかタブ表示モードかを調べる
      editor.NewFile();
      var SDI = (editor.ActiveDocument.name == document.name && editor.documents.count == 1);
      //SDIモードの場合はタブ表示モードに変更
      if(SDI)editor.ExecuteCommandByID(4233); //ME_IDは変わる可能性大
      //ダミーの新規ファイルを閉じる
      var docs = editor.documents;
      var docindex = docs.count - 1;
      for(var i = docindex ; i > 0; i--){
        if(docs.item(i).name == "" && docs.item(i).saved){
          docs.item(i).close();
          break;
        }
      }
      //操作対象のファイルを開く
      editor.OpenFile(TargetFileName);
      //ここから editor.ActiveDocument で操作可能

      //元が SDIモードだったら復帰する
      if(SDI)editor.ExecuteCommandByID(4233); //ME_IDは変わる可能性大
      Redraw = true;
    //----------
    ただし副作用がいくつか。
    ●タブ表示モードから SDIモードに変更すると ActiveDocument が Documents コレクションの最後のファイルに切り替わります。
    ●SDIモード時の各 Document  Window の位置、サイズは保存されません。「並べて表示」を実行していても状態は解除されます。
    後者は sfcmini  とか MS-Excel  を通して Windows API を使うと何とかなりそうです。

     |  papagoat  |  返信
  2. ご報告・ご心配ありがとうございます。
    最近はちょっと休養期間中で Mery から遠ざかっております。いや、時々考えたりはしているのですが、ハードウェア系に興味が向いている最中でプログラミングに集中できない状態ですw

    > ●Editor.OpenFile の第2引数の指定が効きません。常に ActiveDocument の Encoding で開かれます。

    Encoding 定数が変わったためだと思います。Ver 2 では以下の定数が定義されています。

    meEncodingNone
    meEncodingUTF16LE
    meEncodingUTF16BE
    meEncodingUTF8WithSignature
    meEncodingUTF8WithoutSignature
    meEncodingUTF7
    meEncodingArabic
    meEncodingBaltic
    meEncodingCentralEuropean
    meEncodingChineseSimplified
    meEncodingChineseTraditional
    meEncodingCyrillic
    meEncodingGreek
    meEncodingHebrew
    meEncodingEUC
    meEncodingJIS
    meEncodingShiftJIS
    meEncodingKorean
    meEncodingThai
    meEncodingTurkish
    meEncodingVietnamese
    meEncodingWesternEuropean

    あと、明らかに BOM 付きの UTF8 だと認識できる場合、これらの指定には関係なく UTF8 で開きます。それでもだめなら不具合ですね・・・。

    > ●Document.Selection.SetActivePoint で第1引数に mePosLogical  を指定したときの飛び先が論理位置になりません。

    これはまだ確認できていません、すみません。確認しておきますね。

    > ●meFormatJoinLines が未定義です。document.selection.Format(4);は動作します。

    すみません、これ、内部の定義、スペルミスがありました(汗
    次バージョンでは修正しておきますね。

    > ●[ツール(T)] → [オプション(O)] → [基本]タブ→[閉じるボタン]の設定が SDI にも 影響しています。「無し」にしないと、Document を閉じたときに別の新規ドキュメントが開きます。

    ほんとですね。「×」ボタンでしか閉じたことがなかったので気づきませんでしたorz
    修正しておきますね。

    > ●window.ScriptFullName が「選択」されているマクロファイル名でなく「実行」しているマクロファイル名を返すようになりました。/mfオプションと合わせてマクロの可能性が広がります。かなりうれしい。

    むむ、そもそも選択しているマクロファイル名と実行しているマクロファイル名が別々になること自体、ちょっとおかしいですね。もう少し確認してみます。

     |  Kuro  |  返信
  3. > ●Editor.OpenFile の第2引数の指定が効きません。常に ActiveDocument の Encoding で開かれます。

    エンコード定数が変わったからというわけでは無かったです(汗
    そもそもプログラムをミスってました、、、ごめんなさい。。。
    次バージョンでは修正しておきます。

    > ●Document.Selection.SetActivePoint で第1引数に mePosLogical  を指定したときの飛び先が論理位置になりません。

    確認いたしました。
    これも不具合ですね、、、申し訳ございません。
    修正しておきますね。

    > ●window.ScriptFullName が「選択」されているマクロファイル名でなく「実行」しているマクロファイル名を返すようになりました。/mfオプションと合わせてマクロの可能性が広がります。かなりうれしい。
     
    > むむ、そもそも選択しているマクロファイル名と実行しているマクロファイル名が別々になること自体、ちょっとおかしいですね。もう少し確認してみます。

    確認してみました。ようやく意味がわかりました。
    そうですね、仕様としては「実行」しているマクロファイル名を返すのが正しいですね。
    旧バージョンの Mery が間違っていたことになります。

     |  Kuro  |  返信
  4. >>確認してみました。ようやく意味がわかりました。
    わかりにくい文ですみませんでした。実行中のマクロファイル名を取得したいというのは昔に要望としてあげていたのでした。

    検証の追加です
    ●Document.Selection.SelectLine が行末の改行コードまで含めて選択します。Ver1では改行の前の文字までの選択でした。この結果、ActivePointY が SelectLine に渡した引数に +1 されます。(Document.GetLine は改行の前の文字までの文字列を返します)

    網羅的につぶしたわけではないけれど、Ver1までのマクロの機能はだいたい検証できたかな。漏れがあったらごめんなさい。

     |  papagoat  |  返信
  5. こんばんは、書き込みありがとうございます・

    > わかりにくい文ですみませんでした。実行中のマクロファイル名を取得したいというのは昔に要望としてあげていたのでした。

    いえいえ、文は大丈夫ですよ~!
    そもそも旧 Mery の仕様自体が私の想定と違っていたので、それに気づくまで時間がかかってしまいました(汗

    > ●Document.Selection.SelectLine が行末の改行コードまで含めて選択します。Ver1では改行の前の文字までの選択でした。この結果、ActivePointY が SelectLine に渡した引数に +1 されます。(Document.GetLine は改行の前の文字までの文字列を返します)

    これは Mery2 からの仕様変更点ですね。
    行の選択は改行文字を含めるようにしました。
    他のテキストエディタでもその仕様になってるものが多い点、選択しない状態での CTRL + X での行カット機能との整合性などを考慮した上での仕様です。

    > 網羅的につぶしたわけではないけれど、Ver1までのマクロの機能はだいたい検証できたかな。漏れがあったらごめんなさい。

    ご協力ありがとうございます、また何かありましたらご連絡頂けると幸いです。

     |  Kuro  |  返信