[mery2][不具合]エンコード選択でエラー

  1. 初めまして、ks と申します。
    周りが秀丸使いばかりの中、一人自分用の Mery マクロをごりごり書いて悦に浸ってます。

    Mery2 の最新 Alpha 版(2.0.6.3803)を使っていて 1 件の不具合を見つけてしまったので報告です。

    1) 空 (0byte) のテキストファイルを用意
    2) UTF-16 で開こうとする => エラー
    3) 別のコードで開き、ステータスバーからUTF-16 に変更 => エラー

    UTF-16 だけで発生し、他のエンコードでは発生しません。
    ご確認いただければと思います。

    # Mery1 時代の自作マクロも、ほとんど問題なく動いてますが、
    # 若干元と動作が違うところがあったりしますね
    # 不具合といった感じの動作ではないので、
    # 正式な Mery2 がでてから、ちゃんと確認しようと思いますが

     |  ks  |  返信
  2. はじめまして、Mery 開発担当の Kuro と申します。

    > 周りが秀丸使いばかりの中、一人自分用の Mery マクロをごりごり書いて悦に浸ってます。

    Mery をご愛用くださりありがとうございます。私が言うのもアレですがやはり、JavaScript や VBScript での記述が可能という点では秀丸様よりも扱いやすいかもしれませんね。

    私は、今もあるのか解りませんが、フリーソフト開発者は秀丸のライセンスが無料になるっていう制度があったので、それを頂くためにフリーソフトを開発しはじめたという経緯があったりなかったりしますw

    私も秀丸エディタを愛用していましたので、今でも例えば置換が「CTRL + R」だったりと、秀丸エディタの面影が残っていたりします。

    > 1) 空 (0byte) のテキストファイルを用意
    > 2) UTF-16 で開こうとする => エラー
    > 3) 別のコードで開き、ステータスバーからUTF-16 に変更 => エラー

    ご報告ありがとうございます。
    これは完全に不具合ですね、今まで気づきませんでした(汗
    Mery のテキストエディタエンジンとして使用させて頂いている真魚さんの方でも同様のエラーが出ていますし、テキストエディタエンジンの根本的なバグだと思われます。
    たぶん直ると思いますので、次バージョンの修正項目に入れておきますね。

    > # Mery1 時代の自作マクロも、ほとんど問題なく動いてますが、
    > # 若干元と動作が違うところがあったりしますね

    そうですね、若干仕様変更した部分がありますが細かい挙動まではちょっと把握できていません・・・。何かお気づきの点があったらご報告頂けると助かります。

     |  Kuro  |  返信
  3. ks です。確認 & 返信ありがとうございます。

    > 私が言うのもアレですがやはり、JavaScript や VBScript での記述が可能という点では秀丸様よりも扱いやすいかもしれませんね。
    JavaScript使いの私にとっては、新たに勉強することなく記述できるのはありがたいです。

    > Mery のテキストエディタエンジンとして使用させて頂いている真魚さんの方でも同様のエラーが出ていますし、テキストエディタエンジンの根本的なバグだと思われます。
    > たぶん直ると思いますので、次バージョンの修正項目に入れておきますね。
    簡単に修正できるようでしたらお願いします。
    意外と根が深い問題なんですかね。
    新規作成 => テキスト入力 => 保存時にエンコード UTF-16 選択だと問題にならないので、発生することは稀ですよね。
    私も変な使い方していなければまず見つけられなかったでしょうし。

    > > # Mery1 時代の自作マクロも、ほとんど問題なく動いてますが、
    > > # 若干元と動作が違うところがあったりしますね
    > そうですね、若干仕様変更した部分がありますが細かい挙動まではちょっと把握できていません・・・。何かお気づきの点があったらご報告頂けると助かります。 
    一応自作マクロ動かした時の挙動の違いを。(バグなのか正常なのか、全く判断できていませんが)

    1) SetActivePoint, SetAnchorPoint での範囲選択が、Mery2 だと 1 文字少ない
       document.selection.SetActivePoint(mePosLogical, document.GetLine(N).length, N);
       document.selection.SetAnchorPoint(mePosLogical, 1, N);
       Mery1 だと行全体が選択されるが、Mery2 だと末尾 1 文字が選択されない。
       length+1 だと行全体が選択される。

    2) 「左のタブをすべて閉じる」実行後、直後にマクロで document を参照すると NULL になっている。
       マクロから ActiveDocument 以外の Document を close() しても、document が NULL になっているよう。

    3) マクロのカスタマイズでマクロファイルを開いた直後、開かれた Document にマクロからアクセスできない。
       具体的には Editor.Documents.Item(Editor.Documents.Count-1) がエラーになる。

    4) マクロから close() で全ての Document を閉じたとき、Mery2 では終了せず「無題」になる。
       Mery1 ではソフトが終了していましたが、これは意図的に挙動を変えたと認識しています。

    1 は自作マクロユーザだと、影響ある人もいるんじゃないかと思います。マクロ側の簡単な修正で対応できますが。
    2, 3, 4 は自分以外に影響ある人がいるとは思えませんが、一応...
    時間に余裕があるときにでも見ていただければと思います。

    正式版のリリース、心待ちにしております。

     |  ks  |  返信
  4. ks です。連投申し訳ないです。
    マクロ関連の報告、色々と確認が抜けてました。

    > 1) SetActivePoint, SetAnchorPoint での範囲選択が、Mery2 だと 1 文字少ない
    >    document.selection.SetActivePoint(mePosLogical, document.GetLine(N).length, N);
    >    document.selection.SetAnchorPoint(mePosLogical, 1, N);
    >    Mery1 だと行全体が選択されるが、Mery2 だと末尾 1 文字が選択されない。
    >    length+1 だと行全体が選択される。
    恐らく papagoat さんのご指摘と同じ原因ですよね、きっと。

    > 4) マクロから close() で全ての Document を閉じたとき、Mery2 では終了せず「無題」になる。
    >    Mery1 ではソフトが終了していましたが、これは意図的に挙動を変えたと認識しています。
    修正履歴を確認すると、しっかりと仕様として書いてあったんですね。失礼しました。
    オプションで変更すると、タブの「閉じる」ボタン使用時と同様に、終了<=>「無題」が切り替わりました。
    window.Close() でオプションに依らない終了もできるので、全く問題ないですね。

    検証不足で報告してしまい、申し訳なかったです。

     |  ks  |  返信
  5. こんばんは、ご報告ありがとうございます、そしてお返事遅くなってしまいごめんなさい。

    > 1) SetActivePoint, SetAnchorPoint での範囲選択が、Mery2 だと 1 文字少ない
    >    document.selection.SetActivePoint(mePosLogical, document.GetLine(N).length, N);
    >    document.selection.SetAnchorPoint(mePosLogical, 1, N);
    >    Mery1 だと行全体が選択されるが、Mery2 だと末尾 1 文字が選択されない。

    そうですね、document.GetLine の仕様が改行文字を含まないようになっているので、純粋に行の文字数を返すようになったためだと思います。

    > 2) 「左のタブをすべて閉じる」実行後、直後にマクロで document を参照すると NULL になっている。
    > マクロから ActiveDocument 以外の Document を close() しても、document が NULL になっているよう。

    すみません、これは再現できませんでした。
    ただ、エディタにフォーカスが無い状態でマクロから Documents などを操作しようとした場合に NULL になっていた個所がありましたので修正しておきました。たぶん、これが影響しているんじゃないかと思うのですが・・・。

    > 3) マクロのカスタマイズでマクロファイルを開いた直後、開かれた Document にマクロからアクセスできない。
    > 具体的には Editor.Documents.Item(Editor.Documents.Count-1) がエラーになる。

    これも (2) と同様の原因と、さらにマクロカスタマイズから編集した場合に勝手にエディタからフォーカスが外れているという不具合によって引き起こされたもののようです。両社とも修正しておきました。でも、これは Mery 1 でも発生しますねw いままで見落としていました。本当にありがとうございます。

    > > 4) マクロから close() で全ての Document を閉じたとき、Mery2 では終了せず「無題」になる。
    > window.Close() でオプションに依らない終了もできるので、全く問題ないですね。

    了解いたしました、無題を残すか残さないかという点は議論の的になりそうな気がしますね、、、個人的にはどっちでも良かったりするのですが、一番いやなのはオプションで残すか残さないかを選択っていうケースですね・・・w

    > 検証不足で報告してしまい、申し訳なかったです。

    いえいえ、お気軽にご投稿お願いします。
    私なんて検証不足でソフト公開しちゃってますからね・・・orz

     |  Kuro  |  返信
  6. ksです。修正&更新ありがとうございます。今やっと最新Alpha版(2.0.7.3892)で確認できました。

    >> 1) SetActivePoint, SetAnchorPoint での範囲選択が、Mery2 だと 1 文字少ない
    > そうですね、document.GetLine の仕様が改行文字を含まないようになっているので、純粋に行の文字数を返すようになったためだと思います。
    仕様変更了解です。 SetActivePoint 云々ではなく別のところが理由でしたか。マクロ修正で対応しました。

    > 2) 「左のタブをすべて閉じる」実行後、直後にマクロで document を参照すると NULL になっている。
    > 3) マクロのカスタマイズでマクロファイルを開いた直後、開かれた Document にマクロからアクセスできない。
    両方とも正常に動作しました! 助かりました。

    >> 4) マクロから close() で全ての Document を閉じたとき、Mery2 では終了せず「無題」になる。
    >無題を残すか残さないかという点は議論の的になりそうな気がしますね、、、個人的にはどっちでも良かったりするのですが、一番いやなのはオプションで残すか残さないかを選択っていうケースですね・・・w
    このあたりは個々人の感覚でしかないですよね。タブブラウザでもこれはオプションになってますし(デフォルトだと「空白」が多いのかな)。
    ただ私自身は閉じる用のマクロ(他マクロの後始末)を用意している人間なので、Mery の標準動作無視で自分好みの閉じる動作にしてますが。

    Mery も Mery 以外の記事更新も期待しています。(Mery 以外の記事の方が面白くて待ち遠しかったり)

     |  ks  |  返信
  7. こんばんは、ご確認ありがとうございます。
    毎度のことながらやっぱり不具合が出てしまって申し訳ございません。

    > 仕様変更了解です。 SetActivePoint 云々ではなく別のところが理由でしたか。マクロ修正で対応しました。

    お手数をおかけします。

    > このあたりは個々人の感覚でしかないですよね。タブブラウザでもこれはオプションになってますし(デフォルトだと「空白」が多いのかな)。

    ですね、、、オプションかぁ・・・。
    オプションの基本設定画面はもう一杯ですし、、、でも、ユーザ設定できれば問い合わせも減るかもしれませんね、ちょっと検討してみます。

    > Mery も Mery 以外の記事更新も期待しています。(Mery 以外の記事の方が面白くて待ち遠しかったり)

    ありがとうございますw
    でも、ブログ記事を読んでくれている方って少ないと思います、、、マニアックで偏ったネタが
    多いですからねw しかし分かってくれる人がいて嬉しいです!

     |  Kuro  |  返信