【要望】表示>編集モードの編集モードを関連付けされた拡張子を優先的に上に表示する

  1. 初めまして、いつもMeryを使わせていただいております

    要望なのですが、タイトルのようなものがほしいです

    例をあげると.htmlを開いているときに編集モードの上から順に
    html
    html5
    html5.1
    のように並んでその後は普通の並びというようなものです

    また、編集モードが長くなって上下に矢印が出た際にスクロールできたらなと思います

    対応していただけると嬉しいです
    よろしくお願いします

     |  S  |  返信
  2. Mery をご愛用くださりありがとうございます。

    > 関連付けされた拡張子を優先的に上に表示する

    前提として Mery は、1 つの編集モードに対して複数の拡張子を割り当てることはできますが、これとは逆に、ご指摘のような html、html5、html5.1 のような複数の編集モードに対して同一の拡張子を割り当てる、といった使い方は想定していません。

    この場合、html の拡張子を開くと、どの編集モードが割り当てられるか分かりません。
    (恐らく上にある方が採用されるとは思いますが、プログラム的にはその保証はありません)

    そういうわけで、仕様的に対応は難しいです。

    複数の編集モードに対して同一の拡張子を設定するケースというのは少ないように思いますが…
    html 関連だけであれば手動で上に配置、というわけにはいかないでしょうか?

    > また、編集モードが長くなって上下に矢印が出た際にスクロールできたらなと思います

    これも残念ながら、Windows の仕様でメニューの中にスクロールバーを表示することはできません。
    (もっとも、メニュー自体を自力で作ればできなくはないと思いますが、恐らく私の技術力では無理だと思われます…)

     |  Kuro  |  返信
  3. それぞれのバージョンを特定するような文字列があれば,ファイルを開いた時に自動で切り替えることはマクロで対応できます.
    次のマクロを登録して,「イベントで実行」で「ファイルを開いたとき」を登録してみて下さい.
    なおマクロ中のバージョン特定文字列は私はよくわからないので,必要に応じて修正して下さい.

    var Extension = "htm|html";
    var HTML5 = "HTML5 を特定する文字列";
    var HTML5_1 = "HTML5.1 を特定する文字列";

    var reg = new RegExp("\\.(" + Extension + ")$", "i");
    if (reg.test(Document.Name)) {
        if (Document.Text.indexOf(HTML5) >= 0) {
            Document.Mode = "html5";
        } else if (Document.Text.indexOf(HTML5_1) >= 0) {
            Document.Mode = "html5.1";
        } else {
            Document.Mode = "html";
        }
    }

     |  ks  |  返信
  4. > それぞれのバージョンを特定するような文字列があれば,ファイルを開いた時に自動で切り替えることはマクロで対応できます.

    > 更にマクロで対応してみました.

    すいません、投稿してる間に投稿されたみたいで最初の投稿に気づいてませんでした…
    なるほど
    ありがとうございます!

    検索文字列が正規表現でできるようにしたので、一応貼ります
    var def = [
    //["拡張子", "検索文字列", "モード"],
      ["html|hta|asp|aspx|shtml", /<(?:command|hgroup|main|menuitem|dialog)(?:>| )/i, "html5.1"],
      ["html|hta|asp|aspx|shtml", /<\!DOCTYPE html>|(?:<(?:article|aside|audio|bdi|canvas|datalist|details|embed|figcaption|figure|footer|header|keygen|mark|menu|meter|nav|output|progress|section|source|summary|time|track|video|rp|rt|ruby|wbr)(?:>| ))/i, "html5"],
      ["htm|hta|asp|aspx|shtm", "", "html"],
      [/^Rakefile$/, "", "Rakefile"],
      [/^Gemfile$/, "", "ruby"],
      [/^Guardfile$/, "", "ruby"]
    ];

    for (var i=0; i<def.length; i++) {
      var reg = def[i][0];
      var reg2 = def[i][1];
      if (typeof def[i][0] == "string") {
        reg = new RegExp("\\.(" + def[i][0] + ")$", "i");
      }
      if (typeof def[i][1] == "string") {
        reg2 = new RegExp(def[i][1]);
      }
      if (reg.test(Document.Name)) {
        if (reg2.test(Document.text)) {
          Document.Mode = def[i][2];
          Quit();
        }
      }
    }

     |  S  |  返信
  5. 返信ありがとうございます

    > 前提として Mery は、1 つの編集モードに対して複数の拡張子を割り当てることはできますが、これとは逆に、ご指摘のような html、html5、html5.1 のような複数の編集モードに対して同一の拡張子を割り当てる、といった使い方は想定していません。
    > そういうわけで、仕様的に対応は難しいです。
    なるほど
    わかりました

    > 複数の編集モードに対して同一の拡張子を設定するケースというのは少ないように思いますが…
    > html 関連だけであれば手動で上に配置、というわけにはいかないでしょうか?
    そのような機能が…(気づいてませんでした…すいません)
    試してみます

    > これも残念ながら、Windows の仕様でメニューの中にスクロールバーを表示することはできません。
    > (もっとも、メニュー自体を自力で作ればできなくはないと思いますが、恐らく私の技術力では無理だと思われます…)
    なるほど
    だから、他のソフトでもこうなるのですね
    勉強になりました

    あともう一つ要望なのですが(すいません何度も)
    編集モードの拡張子の関連付けで「Rakefile」や「Gemfile」などの拡張子なしの定型の名前のファイルの関連付けがほしいです

    ご検討のほど、よろしくお願いします

     |  S  |  返信
  6. > あともう一つ要望なのですが(すいません何度も)
    > 編集モードの拡張子の関連付けで「Rakefile」や「Gemfile」などの拡張子なしの定型の名前のファイルの関連付けがほしいです

    更にマクロで対応してみました.
    定義文字列で簡単に対応を書けるようにしています.
    # こうやって何でもマクロで解決するのが悪い癖だ

    var def = [
    //["拡張子", "検索文字列", "モード"],
      ["htm|html", "HTML5 を特定する文字列", "html5"],
      ["htm|html", "HTML5.1 を特定する文字列", "html5.1"],
      ["htm|html", "", "html"],
      [/^Rakefile$/, "", "Rakefile"],
      [/^Gemfile$/, "", "Gemfile"],
    ];

    for (var i=0; i<def.length; i++) {
      var reg = def[i][0];
      if (typeof def[i][0] == "string") {
        reg = new RegExp("\\.(" + def[i][0] + ")$", "i");
      }
      if (reg.test(Document.Name)) {
        if (def[i][1] == "" || Document.Text.indexOf(def[i][1]) >= 0) {
          Document.Mode = def[i][2];
          Quit();
        }
      }
    }

     |  ks  |  返信
  7. ks さん、マクロありがとうございます。
    速攻でこんな大作を 2 つも組み上げるなんて驚愕です・・・w

    これらはイベントマクロとして、ファイルを開いたときに実行するように設定すれば良い感じですかね。

     |  Kuro  |  返信
  8. ● S さん

    すごい,正規表現バリバリな上に若干マクロ改変されてる……
    マクロ読める方だと応用が利いてやれることが広がりますね.

    ● Kuro さん

    ファイルを開いたとき,に登録するとナイスな感じで動作しますね.
    よほど大きいファイルでもない限りは速度的にも影響ないですし,やはりイベント対応は対応マクロ作れるとかなり強力です.

     |  ks  |  返信
スポンサーリンク