【不具合】閉じて開く(D) の動作について

  1. 長いこと使っているのに、よくよく考えてみたら今まで押した事の無かったボタンがあったので興味本位で押してみた所、見事に2つとも不具合に遭遇しました。運がいいのか悪いのか……の玄米茶です。
    Meryの次期バージョンに持ち越させない様に取り急ぎまとめました。
    あと年末恒例のメモ整理で出てきた物を少し。
    OS: Win7 64bit
    Mery build: 2.4.6 5927

    【ファイル(F)→閉じて開く(D) の動作について】
    閉じようとするファイルを、開くダイアログでそのまま指定した際の動作に関してです。

    現状ではファイルを閉じないでそのまま表示が継続される仕様になっています。このため

      - エンコード指定が効かない。
      - 動作履歴がそのまま残る。
      - 書き込み禁止設定がそのまま残る。

    といった仕様になってしまっています。わざわざ同じファイルを閉じて開くとしたら、動作履歴などを一旦リセットする事を期待すると思います。他のファイルと同様に扱い、一度閉じてから開きなおす方式にしては如何でしょう。

    【編集(E)→選択範囲の変換(S)→改行を挿入/削除, 行の分割/統合 の動作について】
    以下の様に選択した状態で 改行を挿入(R) または 行の分割(S) などを使うと選択範囲以降の文字列がさらに追加される不具合があります。

    ```
    // aaaを選択状態で 改行を挿入/削除 または 行の分割/統合 のどれかを実行
    aaabbb

    // なんかふえた!
    aaabbbbbb
    ```

    また折り返し有りで折り返される行に対して 改行を挿入(R) または 行の分割(S) の二つをそれぞれ実行した場合(こちらは本来の想定されている使い方だと思うのですが)、全く同一の動作になっているようです。行の分割の方は後ろに空白と改行が付加されるのが本来の動作だと推測しているのですが如何でしょう。
    あれ? それだと 分割→結合 で空白が増えるか?? とにかくココの4つのボタンに問題があるようなので調べてみてください。

    【ヘッダファイルに定義されている変数名について】
    TILE_HORZだけど上下、TILE_VERTだけど左右にウィンドウが並びます。単純なミスか命名規則上の事なのか分かりませんので一度チェックしてみてください。とりあえず今のところウィンドウが水平方向に伸びるからHORZという風に解釈してます。

    ```
    // よくみたら似た名前もあったのですがこれの事です
    #define MEID_WINDOW_TILE_HORZ 2192
    #define MEID_WINDOW_TILE_VERT 2193
    ```

    【マクロリファレンス の誤字・脱字】

    Selection インターフェイス
      - StartOfLine メソッド
        [パラメータ]
        Extend
            略可能→省略可能

      - EndOfLine メソッド
        [パラメータ]
        Extend
            略可能→省略可能

      - IsEmpty プロパティ
        [説明文]
            "選択範囲が空どうかを取得します。"
            →"選択範囲が空`か`どうかを取得します。"

    【提案1】
    Window インターフェイス
      - Close メソッド
        [説明文]
            "開いている文書を閉じます。"

    これは確かに文書を閉じますが、Document インターフェイスにある同名のそれと違い、Meryごと終了する旨を表記した方が分かりやすいと思いますが如何でしょう。

    【提案2】
    機会があればステルス的にMeryを薦めたりしています。その便利さを伝えるためにHPのリファレンスを使って説明をするのですが、その際に[構文]だけでなく[コーディング形式]も記述してあると分かり易いのでは? と思う事が何度かありました。

    [コーディング形式]
    document.selection.Copy();

    こんな感じでマクロの記録/停止で出力される形式も書いてあると理解しやすいと思います。特にプロパティ操作の get/set の物なんかは、使い方が解りにくい様でよく尋ねられます。まあ、引数がある場合など、どうやって記述するかという問題はあるのですが……。
    ドキュメントの充実はユーザーの敷居を下げるのに一役買いそうなので、こういったアプローチも考えてみては如何でしょうか。

    【提案3 に見せかけた何か】
    お気に入りプラグインのポップアップ位置についてですが、時々あらぬ方向からポップアップが出現してビックリすることがあります。

    起こった時の状況を思い出してみたら、Meryをテキストリーダーとして使用する場合によく起こるようです。
    こんな感じです。まず、テキストをキャレットを置き去りにしてマウスホイールやスクロールを使って先へ先へと読み進めます。そこで、他のファイルを呼び出す為にマウスジェスチャーやショートカットキーでプラグインを呼び出します。するとあらぬ場所にポップアップが出現するという事になるわけです。読み進めていたテキストの目線やマウスカーソル
    以外の場所なので、結果的に驚かされるようです。

    ……で、マウスカーソルの位置にお願いしようかと思ったのですが。
    今度は書いている時には、マウスカーソルは端のほうに追いやられてますからね……。
    やっぱこの話無かった事にw
    まあ、その人の使用状況によるんですよね。私はよくよく考えて無しということでw

    ただ今後、Meryをテキストリーダーとして使用する事が多い方やマウスジェスチャ派の方からの要望はあるかもしれませんので、その時は言外にあるこういった状況を汲み取ってどうぞ良しなに扱ってあげてください。
    (……これ少し古いメモから出てきたので報告済みかも? まあ新しく書き直したのでついでです)

    【要望:「ファイルに含まれていたNULL文字は、スペースに変換して開きます」の悲劇について】

    この表示が出た時にOKしか選択肢が無く「キャンセル」の意味(祈り)を込めて右上の×印を押すのですが……やっぱり開いてしまいます。(´;ω;`)ブワッ

    大体この警告が出るのは間違ったファイルを開こうとする時なので、サイズが大きいものが大半です。つまりしばらく操作不能になるか、クラッシュするかになるんですよね。
    警告の段階で開く事自体をキャンセルできれば悲劇が減ると思うのですが如何でしょう?

    ---
    思ったより長くなりましたので枕ネタはカットです。
    年末でいろいろ大変でしょうから個々の項目の返事は結構です。もしくは言っておきたい事があればその項目だけ返事をいただければ十分です。
    どうぞヤギにでも何にでもなって、自由に街を走り回ってください。
    それでは次期バージョンか、もしくはアップデートを挟むか分かりませんが、お待ちしております。

     |  玄米茶  |  返信
  2. ご報告ありがとうございます。

    > 【ファイル(F)→閉じて開く(D) の動作について】

    「閉じて開く」は現在編集中のファイルを閉じて、別のファイルを開くことを想定して用意している機能なので同じファイルを指定しても何も起りません。同じファイルを読み直すときは別途用意されている「読み直し」の機能のご利用を想定していますので。

    「閉じて開く」の機能に、同じファイルだったら「読み直し」と同じ動作をさせるというロジックを組み込むこともできなくはないですが、読み直しと機能が重複しますしプログラム的に冗長になってしまいますのでご了承ください。

    > 【編集(E)→選択範囲の変換(S)→改行を挿入/削除, 行の分割/統合 の動作について】
    > // なんかふえた!
    > aaabbbbbb

    ほんとですね。
    前回のバージョンアップ時に修正した機能のような気がしますが…w
    そもそも「改行を挿入」と「行を分割」の違いというか、何のための機能なのかすら分からなくなってきました。

    > 【ヘッダファイルに定義されている変数名について】
    > TILE_HORZだけど上下、TILE_VERTだけど左右にウィンドウが並びます。

    これは Windows の仕様ですね。
    Windows では昔から [上下に並べて表示(H)] と [左右に並べて表示(V)] (H = Horizontal, V = Vertical) と表記される伝統のようですので、Mery の内部名もそれに準拠しています。

    ちなみに英語の Windows アプリでも下記の通り、なんか逆じゃね?な感じですが正しいようです。
    http://www.cadzone.com/manuals/crash-crime/crash9/Program_Commands/windows_menu/Tile_horizontal_files/tile-hor-menu.gif

    > 【マクロリファレンス の誤字・脱字】

    毎度すみません、修正しておきました。

    > 【提案2】
    > 機会があればステルス的にMeryを薦めたりしています。その便利さを伝えるためにHPのリファレンスを使って説明をするのですが、その際に[構文]だけでなく[コーディング形式]も記述してあると分かり易いのでは? と思う事が何度かありました。

    宣伝ありがとうございます、ほんとおっしゃる通りで、マニュアルの充実はソフトの人気にも影響が大いにあると思います。公開当初はそういうサンプル的なものを書こうとしていたのですが、なにぶんマニュアル作成が大嫌いなのでモチベーションが続きませんでした。(MeryWiki のマニュアルはバイトにやってもらいましたw)

    気が向いたらということで。

    > 【提案3 に見せかけた何か】
    > お気に入りプラグインのポップアップ位置についてですが、時々あらぬ方向からポップアップが出現してビックリすることがあります。
    > ……で、マウスカーソルの位置にお願いしようかと思ったのですが。
    > やっぱこの話無かった事にw

    これは開発当時から頭を悩ませた問題です。
    どっちの仕様も一長一短。ということで、下記のような変わった仕様になっています。

    ①ショートカットキーで呼び出すときは、文字を入力中な場合が多いはずなのでキャレット位置に表示したい
    ②右クリックメニューや、上部メニューから呼び出すときはマウスから呼び出しなのでマウス位置に表示したい
    ③プラグイン側では、どっちから呼び出されたかは分からない

    そゆことでショートカットキーとして使われやすそうなキーである SHIFT か CTRL が押されている場合はキャレット位置、それらが押されていない場合はマウス位置に表示される仕様になっています。
    これを逆手にとって、ショートカットキーの割り当てを SHIFT か CTRL を使用しないキーにすればマウス位置に表示されるようにはなります。これが使いやすいかどうかは分かりませんがw

    あと、スクロールでキャレット位置が画面外にあるケースの問題については対策を考えてみます。

    > 【要望:「ファイルに含まれていたNULL文字は、スペースに変換して開きます」の悲劇について】
    > 警告の段階で開く事自体をキャンセルできれば悲劇が減ると思うのですが如何でしょう?

    これは何度かご意見をいただいたのですが、現在のエディタエンジンの仕様上、対応が困難ということでご回答させていただいております。内部仕様を大幅に変更する必要がありますが、将来的には対応できればと思います。

    > 年末でいろいろ大変でしょうから個々の項目の返事は結構です。もしくは言っておきたい事があればその項目だけ返事をいただければ十分です。

    お気づかい、ありがとうございます。が、もっと早く言ってください!www
    もう全部書いてしまいました…

    > どうぞヤギにでも何にでもなって、自由に街を走り回ってください。
    > それでは次期バージョンか、もしくはアップデートを挟むか分かりませんが、お待ちしております。

    そうしたいのはやまやまなのですが、メリークリスマス更新に向けて開発している日々です。
    結構、更新したい内容が増えてきたので 2 系のアップデートを予定しておりますが、あまり時間が取れないためクリスマスに間に合うかどうか… それでは、玄米茶さんも良い年末年始をお迎えくださいませ。

     |  Kuro  |  返信
  3. まったく、頭のいい人たちの考える事はよくわかりませんね。
    たまにMSの仕様で驚かされます……^^;

    さて、しばらく放置してすみません。
    っていうよりも、返事の件は最初に書くべきでしたねw
    貼り付けてからネタ部分カットしたりして最後になってました。気をつけます。
    えっ? 長いのをなんとかしろ!? 聞こえんな!

    ファイルを開く際のバイナリチェックの導入ありがとう!!!
    これでかなりの人が救われるはず。もう、うれしくて拡張子無しのデータベースファイルとかをガンガン開いて、全部キャンセルしてやりましたよwww

    他の要望なども一通りチェックしてみましたが問題なさそうです。
    ただ 行の結合(J) の際空白が2つ以上並ぶ場合1つに統合する方がいいのかな? という気がしています。……が、それを言い出すと

        - 行末にハイフンがある場合、一つの単語にする
        - インデントの空白やタブの扱い

    等細かい仕様が必要なので、汎用機能としては機械的な結合方法に徹しておくのがいいのかなという気もしてます。細かいものは個々の事情があるので、マクロでどうぞというスタンスですね。

    さて話は変わって、追加分です。
    「おい、どんだけ不満あるんだよ!」という kuroさんのツッコミが聞こえそうですがw
    1つだけ! 1つだけだから。

    【マクロで検索・置換を行う場合、瞬間的に明滅するのをなんとかしたい】
        以下のサンプルテキストにカーソルを置くか、選択状態でサンプルスクリプトを実行
        した場合、Redraw を false にしていても瞬間的に強調表示されてしまいます。
        ただし、タイミング的にされないことも……。そのへんは、よくわかりません。
        再現出来ない場合はサンプルテキストを繰り返し貼り付けて、検索対象を増やす
        と再現出来るかも?

    サンプルテキスト
    ```
    0,0,0,0,0,0,0,0,0,0
    0,0,0,0,0,0,0,0,0,0
    0,0,0,0,0,0,0,0,0,0
    0,0,0,0,0,0,0,0,0,0
    ```

    サンプルスクリプト
    ```javascript
    window.Redraw = false;

    if (document.selection.Text.length == 0)
        document.selection.SelectLine();

    // 置換(Meryスクリプト版) - 矩形選択対応, ただし点滅有り
    document.selection.replace('( +)*,( +)*', ', ',
        meFindReplaceRegExp | meReplaceSelOnly | meReplaceAll);
    document.HighlightFind = false;

    // 置換(JavaScript版) - 点滅回避, ただし矩形選択非対応
    //var str = document.selection.Text;
    //document.selection.Text = str.replace(/( +)*,( +)*/gim, ', ');

    window.Redraw = true;
    ```

    マクロ実行時に "サクッと決まった感" で気持ちいいかどうかだけで、実害があるわけでは無いので kuroさんのそのうちやるリストに加えておいて下さい。

    単に明滅が嫌ならテキスト取得して javascript で置換してから置き換える回避がつかえますからね。といっても矩形選択時には使えなくなってしまいますが、私は矩形選択で使うマクロはそう頻度が高くないのでそのままでも平気です。

    あっ、もちろんこれに対応する為に速度を犠牲にするくらいならこのままで結構ですよ。

    外部ツールに投げている部分なので手を入れにくそうですが、気が向いたらよろしくお願いします。

    それでは良いお年を。

     |  玄米茶  |  返信
  4. 先輩!長いッス!

    > ファイルを開く際のバイナリチェックの導入ありがとう!!!

    空のタブが開かれてしまうのが心残りですが、仕様上、エディタ部を生成しないとファイルを読み込むことができないんですねぇ… (そのあとに自動的に閉じる、とかならできそうですけど無理に閉じなくてもいいかなと思って放置です)

    > 他の要望なども一通りチェックしてみましたが問題なさそうです。

    ご確認ありがとうございます。
    思ったより問題が少なそうなのでちょっと驚いていますw

    > ただ 行の結合(J) の際空白が2つ以上並ぶ場合1つに統合する方がいいのかな?

    そのようですね。
    行末のハイフンはともかく、インデントや空白はトリムをかけて 1 つに統合するようにしてみます。

    > 【マクロで検索・置換を行う場合、瞬間的に明滅するのをなんとかしたい】

    確認いたしました。
    なかなかのチラリズムでした。

    検索・置換の際にはハイライト表示を反映させるため強制描画しているのですが、マクロから呼んだ時もそりゃ再描画されるわな、と言った感じでした。次のバージョンではいい感じにしておきますね。

    > あっ、もちろんこれに対応する為に速度を犠牲にするくらいならこのままで結構ですよ。

    マクロ中では強制描画する意味ないので抑制して、速度的にはむしろ速くなると思いますw

    > それでは良いお年を。

    ありがとうございます、良いお年を!

     |  Kuro  |  返信