xenter - 拡張Enter

2008/2/8
Ver0.11以前のバージョンでは、秀丸の設定で、[その他]-[動作環境]-[検索]にある「検索での表示」が「点滅表示」になっていると、思惑通りに動作しませんでした。この問題は、Ver0.12で対応しています。

CONTENTS

最新版

概要

アーカイブ付属の解説テキスト: xenter.txt 直

このマクロxenter.macは、WZ EDITOR風のCtrl-Enterを目指して作り始めたマクロで、気の利いた改行処理を行います。

WZ EDITORXHTMLプラグインを解説したページ:
「Enterキーの使い分け - XHTMLプラグイン マニュアル」
http://www.villagecenter.co.jp/atvc/wz/xhtml/xhtml/uienter.html

作り始めた当初は、WZ EDITORをまんま模倣しようと思っていましたが、あっさり方向転換し、HTML、C系ソース、一般テキストにも対応させることにしました(まだ不完全ですが‥‥)。

このマクロは、改行を打つタイミングで機能することを目論んでおり、 私はこのマクロをCtrl-Enterに割り当てて使用しています。もしあなたもそうしてくれるなら、作った甲斐があったりなかったり(どっちだよ! 素直に嬉しいと言え!)。

主な仕様
HTMLファイルでの使用時
  1. 閉じていないタグがあれば、閉じる処理をします。
  2. <table>や<ul>等のすぐ後ろにカーソルがあるときに実行すると、展開処理をします。
  3. カレント行が空行で、前後行も空行なら、<p></p>を挿入します。
  4. <p>と</p>の間にカーソルがあり、カーソル後方で最初に見つかったタグが</p>のとき、<br />を挿入し、改行処理をします。
  5. 範囲選択中に実行された場合、選択範囲を<p>〜</p>で括ります。
  6. </p>や</div>のすぐ後ろにカーソルがあるときに実行すると、新しい段落を作ります。
C系ソースでの使用時
  1. if、switch、for文等の行末で実行すると、展開処理をします。
  2. コメント行 "//" を意識した改行処理をします。
  3. 上記の際、箇条書きを含む場合は、それを意識した改行処理をします。
一般テキストでの使用時
  1. 行頭のホワイトスペースや、箇条書きを意識した改行処理をします。
  2. 引用符を意識した改行処理をします。

具体例

細かな仕様を長々と書くより、例を見た方が早いので、ファイル種別ごとに例を示していきます。以下、_ はカーソル位置を表します。

なお、例には載せていませんが、基本的にどのケースでも、行頭のホワイトスペースを許容します。つまり、

    (a) ああああああああああ_

というように、先頭にスペースやタブがある場合は、それを踏まえて、

    (a) ああああああああああ
    (b) _

という処理をします。

HTMLファイル
  1. タグ閉じ処理

    <p>あああああ_

    <p>あああああ</p>_

  2. タグ閉じ処理 その2

    <p>あああ<em>いいい_

    <p>あああ<em>いいい</em>_

  3. 途中改行処理

    <p>ああああああ_いいいいいい</p>

    <p>ああああああ<br />
    _いいいいいい</p>

  4. 段落挿入処理


    _


    <p>_</p>

  5. 展開処理(table)

    <table>_

    <table>
      <tr>
        <td>_</td>
      </tr>
    </table>

  6. 展開処理 その2(ul、ol)

    <ul>_

    <ul>
      <li>_</li>
    </ul>

  7. 展開処理 その3(dl)

    <dl>_

    <dl>
      <dt>_</dt>
      <dd></dd>
      <dt></dt>
      <dd></dd>
    </dl>

  8. 新段落

    <p>ああああああああ</p>_

    <p>ああああああああ</p>

    <p>_</p>

  9. 新段落 その2

    <p class="hoge" style="font-size: 1.2em">
    ああああああああ
    いいいいいいいい
    </p>_

    <p class="hoge" style="font-size: 1.2em">
    ああああああああ
    いいいいいいいい
    </p>

    <p class="hoge" style="font-size: 1.2em">
    _
    </p>

  10. 新段落 その3

      <div class="hoge">
      ああああああああ
      いいいいいいいい
      </div>_

      <div class="hoge">
      ああああああああ
      いいいいいいいい
      </div>

      <div class="hoge">
      _
      </div>

  11. 新段落 その4

    <li>ああああああああ</li>_

    <li>ああああああああ</li>

    <li>_</li>

  12. 範囲選択中に実行されたとき

      ああああああああああああああああああ
      いいいいいいいいいいいいいい
      ううううううううううううううううう
    _

      <p>ああああああああああああああああああ<br />
      いいいいいいいいいいいいいい<br />
      ううううううううううううううううう</p>

C系ソース

後の例で挙げるように、if、else if、while、for、switch、do、try、catch等の制御文に対しては展開処理を行いますが、このとき中カッコがなければ勝手に補います。まずはその例を先に見てください。ここではdoを題材とします。

  • doの後ろにスペースも中カッコもない場合:

    do_

    do {
      _
    } while (false);

  • doの後ろにスペースだけある場合:

    do _

    do {
      _
    } while (false);

  • doの後ろにスペースと中カッコがある場合:

    do {_

    do {
      _
    } while (false);

以下、その他の例を挙げますが、前述のdoの例は、他の制御文にも当てはまります。

  1. 制御文の行端

    if (code == 0)_

    if (code == 0) {
      _
    }

  2. 制御文の行端 その2

    if (code == 0) {
      return 0;
    } else if (code == 1)_

    if (code == 0) {
      return 0;
    } else if (code == 1) {
      _
    }

  3. 制御文の行端 その3

    for (i = 0; i < MAX; i++)_

    for (i = 0; i < MAX; i++) {
      _
    }

  4. 制御文の行端 その4

    switch (code)_

    switch (code) {
    case _:
      
      break;
    default:
      break;
    }

  5. 制御文の行端 その6

    try_

    try {
      _
    } catch (Exception e) {
      
    } finally {
      
    }

  6. 制御文の行端 その7

    try {
      :
    } catch (Exception e)_

    try {
      :
    } catch (Exception e) {
      _
    } finally {
      
    }

  7. 一般的な中カッコの展開

    public class Hoge {_

    public class Hoge {
      _
    }

  8. コメント行

    // あああああああああああああああ_

    // あああああああああああああああ
    // _

  9. コメント行 その2(箇条書きを含む場合)

    // ・ああああああああああ_

    // ・ああああああああああ
    // ・_

  10. コメント行 その3(箇条書きを含む場合)

    // - ああああああああああ_

    // - ああああああああああ
    // - _

  11. コメント行 その4(番号付き箇条書きを含む場合)

    // (1) あああああああああああああああ_

    // (1) あああああああああああああああ
    // (2) _

  12. コメント行 その5(途中改行した場合)

    // (1) ああああああああああ_いいいいい

    // (1) ああああああああああ
    // (2) _いいいいい

  13. コメント行 その6(番号付き箇条書きのバリエーション)

    // 1-2 あああああああああああああああ_

    // 1-2 あああああああああああああああ
    // 1-3 _

  14. コメント行 その7(意味無し。処理の都合上、こうなってしまう)

    ///////////////////////////////////////////////////////_

    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////_

一般テキスト
  1. 通常改行(何もせずに改行する例)

    ああああああああああ_

    ああああああああああ
    _

  2. 箇条書き

    ・ああああああああああ_

    ・ああああああああああ
    _

  3. 箇条書き その2(他にも多々対応)

    ●ああああああああああ_

    ●ああああああああああ
    _

  4. 番号付き箇条書き

    (1) あああああああああああああああ_

    (1) あああああああああああああああ
    (2) _

  5. 番号付き箇条書き その2

    1. あああああああああああああああ_

    1. あああああああああああああああ
    2. _

  6. 番号付き箇条書き その3

    1.1 あああああああああああああああ_

    1.1 あああああああああああああああ
    1.2 _

  7. 番号付き箇条書き その4

    1-2-3 あああああああああああああああ_

    1-2-3 あああああああああああああああ
    1-2-4 _

  8. 英字の箇条書き

    (a) あああああああああああああああ_

    (a) あああああああああああああああ
    (b) _

  9. 引用符を含むケース

    # (1) ああああああああああ_

    # (1) ああああああああああ
    # (2) _

  10. 引用符を含むケース その2

    // # 1.2 ああああああああああ_

    // # 1.2 ああああああああああ
    // # 1.3 _

  11. Rubyドキュメント用

    === ああああああああああ_

    === ああああああああああ
    === _

  12. Rubyドキュメント用 その2

    * ああああああああああ_

    * ああああああああああ
    * _

制限事項など

  1. 丸数字、全角数字、全角英字の箇条書きには対応していません。私自身が絶対に使わないため、将来的にも対応する気はありません。(^^;
  2. 桁折り整形(一定桁数ごとに改行を挿入する処理)は行いません。桁折り処理をして欲しくないテキストもあり、また桁折り整形には、私自身が別の自作マクロを使用しており、2つのマクロの機能を統合せねばならず、どうしたもんかと悩んでいます。
  3. tryの展開は、JavaだろうがC++だろうが、目をつぶって、

    try {
      :
    } catch (Exception e) {
      _
    } finally {
      
    }

    としてしまいます(Javaの展開をしてしまいます)。
    近い将来、対応するつもりですが、なかなかやる気になれません。

    C++プログラマな人へ
    「俺はC++は書くけど、Javaは書かん」という人は、このマクロのpub_developというサブルーチンを見てください。ここに展開文字列群をaStringsというテーブル(二次元配列)で持っているので、そこさえ書き換えれば簡単にカスタマイズできます。
    なお、テーブル中にある "@" は、展開後にカーソルを移動したい場所を示します(逆に言えば、"@" を削れば、展開後にカーソルを移動しなくなります)。

  4. C系ソースにおいて、"/* 〜 */" スタイルのコメント形式には対応していませんが、"*" を箇条書きと認識するので、

    /*
     * ああああああああああ_
     */

    /*
     * ああああああああああ
     * _
     */

    という使い方が可能です。
  5. HTMLファイルにおけるタグを閉じる処理は、必ずしも文法上正しい処理にはなりません(このマクロはHTMLの文法を解釈しません)。例えば、次のケースでは、

    <p>あああああ<em>ほげほげ</em>いい_いいい</p>

    <p>あああああ<em>ほげほげ</em>いい<br />
    _いいい</p>

    となり、これは(少なくとも私の)思惑通りですが、次のケースでは<p>を閉じる処理を行ってしまいます。

    <p>あああ_ああ<em>ほげほげ</em>いいいいい</p>

    <p>あああ</p>_ああ<em>ほげほげ</em>いいいいい</p>

  6. HTMLファイルにおいて、新段落を追加する処理が邪魔をして、思惑通りに動作しない場合があります。例えば次の例:

    <div>
    <p>あああああああああ</p>_

    では、</div>を挿入して欲しいところですが、カーソルが</p>の直後にあるため、

    <div>
    <p>あああああああああ</p>

    <p>_</p>

    となってしまいます(はっきり処理をサボってます。ごめんなさい)。これを避けるためには、

    <div>
    <p>あああああああああ</p>
    _

    としてから、実行してください。すると、

    <div>
    <p>あああああああああ</p>
    </div>_

    と、思惑通りの結果を得ることができます。
  7. HTMLファイルにおいて、タグの検索処理に時間(数秒程度)を要する場合があります。そのようなとき、ウィンドウタイトルが処理中の表示になります。

    SUNのブートのパクリ(プロペラが回る‥‥)

    この表示が動いていれば、少なくともフリーズはしていません。少し待ってやってください。

    ただ、無限ループに陥っている可能性もあります。(爆)
    数秒待ってもプロペラが回りっぱなしの場合は、ESC押下で止めてください。大切なファイルを壊さないためにも、セーブはマメにしましょう。d(^ ^;

  8. ファイル種別の判定は、拡張子をベタにチェックしています。カスタマイズしたい人は、(そんなこと思う人はプログラマな人だと思うので)ソースを見てください。処理部の先頭でチェックしているので、見れば一撃でわかると思います。

更新履歴

xenter-history.txt 直を参照してください。