xenter - 拡張Enter
2008/2/8
Ver0.11以前のバージョンでは、秀丸の設定で、[その他]-[動作環境]-[検索]にある「検索での表示」が「点滅表示」になっていると、思惑通りに動作しませんでした。この問題は、Ver0.12で対応しています。
CONTENTS
最新版
- 2008/2/8 Ver.0.12 xenter-012.lzh
概要
アーカイブ付属の解説テキスト: xenter.txt
このマクロxenter.macは、WZ EDITOR風のCtrl-Enterを目指して作り始めたマクロで、気の利いた改行処理を行います。
WZ EDITORのXHTMLプラグインを解説したページ:
「Enterキーの使い分け - XHTMLプラグイン マニュアル」
http://www.villagecenter.co.jp/atvc/wz/xhtml/xhtml/uienter.html
作り始めた当初は、WZ EDITORをまんま模倣しようと思っていましたが、あっさり方向転換し、HTML、C系ソース、一般テキストにも対応させることにしました(まだ不完全ですが‥‥)。
このマクロは、改行を打つタイミングで機能することを目論んでおり、 私はこのマクロをCtrl-Enterに割り当てて使用しています。もしあなたもそうしてくれるなら、作った甲斐があったりなかったり(どっちだよ! 素直に嬉しいと言え!)。
主な仕様
- 閉じていないタグがあれば、閉じる処理をします。
- <table>や<ul>等のすぐ後ろにカーソルがあるときに実行すると、展開処理をします。
- カレント行が空行で、前後行も空行なら、<p></p>を挿入します。
- <p>と</p>の間にカーソルがあり、カーソル後方で最初に見つかったタグが</p>のとき、<br />を挿入し、改行処理をします。
- 範囲選択中に実行された場合、選択範囲を<p>〜</p>で括ります。
- </p>や</div>のすぐ後ろにカーソルがあるときに実行すると、新しい段落を作ります。
- if、switch、for文等の行末で実行すると、展開処理をします。
- コメント行 "//" を意識した改行処理をします。
- 上記の際、箇条書きを含む場合は、それを意識した改行処理をします。
- 行頭のホワイトスペースや、箇条書きを意識した改行処理をします。
- 引用符を意識した改行処理をします。
具体例
細かな仕様を長々と書くより、例を見た方が早いので、ファイル種別ごとに例を示していきます。以下、_ はカーソル位置を表します。
なお、例には載せていませんが、基本的にどのケースでも、行頭のホワイトスペースを許容します。つまり、
(a) ああああああああああ_
というように、先頭にスペースやタブがある場合は、それを踏まえて、
↓
(a) ああああああああああ
(b) _
という処理をします。
HTMLファイル
-
タグ閉じ処理
<p>あああああ_
↓<p>あああああ</p>_
-
タグ閉じ処理 その2
<p>あああ<em>いいい_
↓<p>あああ<em>いいい</em>_
-
途中改行処理
<p>ああああああ_いいいいいい</p>
↓<p>ああああああ<br />
_いいいいいい</p> -
段落挿入処理
_
<p>_</p>
-
展開処理(table)
<table>_
↓<table>
<tr>
<td>_</td>
</tr>
</table> -
展開処理 その2(ul、ol)
<ul>_
↓<ul>
<li>_</li>
</ul> -
展開処理 その3(dl)
<dl>_
↓<dl>
<dt>_</dt>
<dd></dd>
<dt></dt>
<dd></dd>
</dl> -
新段落
<p>ああああああああ</p>_
↓<p>ああああああああ</p>
<p>_</p> -
新段落 その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> -
新段落 その3
<div class="hoge">
↓
ああああああああ
いいいいいいいい
</div>_<div class="hoge">
ああああああああ
いいいいいいいい
</div>
<div class="hoge">
_
</div> -
新段落 その4
<li>ああああああああ</li>_
↓<li>ああああああああ</li>
<li>_</li> -
範囲選択中に実行されたとき
ああああああああああああああああああ
↓
いいいいいいいいいいいいいい
ううううううううううううううううう
_<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の例は、他の制御文にも当てはまります。
-
制御文の行端
if (code == 0)_
↓
if (code == 0) {
_
} -
制御文の行端 その2
if (code == 0) {
↓
return 0;
} else if (code == 1)_if (code == 0) {
return 0;
} else if (code == 1) {
_
} -
制御文の行端 その3
for (i = 0; i < MAX; i++)_
↓for (i = 0; i < MAX; i++) {
_
} -
制御文の行端 その4
switch (code)_
↓switch (code) {
case _:
break;
default:
break;
} -
制御文の行端 その6
try_
↓try {
_
} catch (Exception e) {
} finally {
} -
制御文の行端 その7
try {
↓
:
} catch (Exception e)_try {
:
} catch (Exception e) {
_
} finally {
} -
一般的な中カッコの展開
public class Hoge {_
↓public class Hoge {
_
} -
コメント行
// あああああああああああああああ_
↓// あああああああああああああああ
// _ -
コメント行 その2(箇条書きを含む場合)
// ・ああああああああああ_
↓// ・ああああああああああ
// ・_ -
コメント行 その3(箇条書きを含む場合)
// - ああああああああああ_
↓// - ああああああああああ
// - _ -
コメント行 その4(番号付き箇条書きを含む場合)
// (1) あああああああああああああああ_
↓// (1) あああああああああああああああ
// (2) _ -
コメント行 その5(途中改行した場合)
// (1) ああああああああああ_いいいいい
↓// (1) ああああああああああ
// (2) _いいいいい -
コメント行 その6(番号付き箇条書きのバリエーション)
// 1-2 あああああああああああああああ_
↓// 1-2 あああああああああああああああ
// 1-3 _ -
コメント行 その7(意味無し。処理の都合上、こうなってしまう)
///////////////////////////////////////////////////////_
↓///////////////////////////////////////////////////////
///////////////////////////////////////////////////////_
一般テキスト
-
通常改行(何もせずに改行する例)
ああああああああああ_
↓ああああああああああ
_ -
箇条書き
・ああああああああああ_
↓・ああああああああああ
・_ -
箇条書き その2(他にも多々対応)
●ああああああああああ_
↓●ああああああああああ
●_ -
番号付き箇条書き
(1) あああああああああああああああ_
↓(1) あああああああああああああああ
(2) _ -
番号付き箇条書き その2
1. あああああああああああああああ_
↓1. あああああああああああああああ
2. _ -
番号付き箇条書き その3
1.1 あああああああああああああああ_
↓1.1 あああああああああああああああ
1.2 _ -
番号付き箇条書き その4
1-2-3 あああああああああああああああ_
↓1-2-3 あああああああああああああああ
1-2-4 _ -
英字の箇条書き
(a) あああああああああああああああ_
↓(a) あああああああああああああああ
(b) _ -
引用符を含むケース
# (1) ああああああああああ_
↓# (1) ああああああああああ
# (2) _ -
引用符を含むケース その2
// # 1.2 ああああああああああ_
↓// # 1.2 ああああああああああ
// # 1.3 _ -
Rubyドキュメント用
=== ああああああああああ_
↓=== ああああああああああ
=== _ -
Rubyドキュメント用 その2
* ああああああああああ_
↓* ああああああああああ
* _
制限事項など
- 丸数字、全角数字、全角英字の箇条書きには対応していません。私自身が絶対に使わないため、将来的にも対応する気はありません。(^^;
- 桁折り整形(一定桁数ごとに改行を挿入する処理)は行いません。桁折り処理をして欲しくないテキストもあり、また桁折り整形には、私自身が別の自作マクロを使用しており、2つのマクロの機能を統合せねばならず、どうしたもんかと悩んでいます。
-
tryの展開は、JavaだろうがC++だろうが、目をつぶって、
try {
としてしまいます(Javaの展開をしてしまいます)。
:
} catch (Exception e) {
_
} finally {
}
近い将来、対応するつもりですが、なかなかやる気になれません。◆C++プログラマな人へ
「俺はC++は書くけど、Javaは書かん」という人は、このマクロのpub_developというサブルーチンを見てください。ここに展開文字列群をaStringsというテーブル(二次元配列)で持っているので、そこさえ書き換えれば簡単にカスタマイズできます。
なお、テーブル中にある "@" は、展開後にカーソルを移動したい場所を示します(逆に言えば、"@" を削れば、展開後にカーソルを移動しなくなります)。 -
C系ソースにおいて、"/* 〜 */" スタイルのコメント形式には対応していませんが、"*" を箇条書きと認識するので、
/*
↓
* ああああああああああ_
*//*
という使い方が可能です。
* ああああああああああ
* _
*/ -
HTMLファイルにおけるタグを閉じる処理は、必ずしも文法上正しい処理にはなりません(このマクロはHTMLの文法を解釈しません)。例えば、次のケースでは、
<p>あああああ<em>ほげほげ</em>いい_いいい</p>
↓<p>あああああ<em>ほげほげ</em>いい<br />
となり、これは(少なくとも私の)思惑通りですが、次のケースでは<p>を閉じる処理を行ってしまいます。
_いいい</p><p>あああ_ああ<em>ほげほげ</em>いいいいい</p>
↓<p>あああ</p>_ああ<em>ほげほげ</em>いいいいい</p>
-
HTMLファイルにおいて、新段落を追加する処理が邪魔をして、思惑通りに動作しない場合があります。例えば次の例:
<div>
では、</div>を挿入して欲しいところですが、カーソルが</p>の直後にあるため、
<p>あああああああああ</p>_<div>
となってしまいます(はっきり処理をサボってます。ごめんなさい)。これを避けるためには、
<p>あああああああああ</p>
<p>_</p><div>
としてから、実行してください。すると、
<p>あああああああああ</p>
_<div>
と、思惑通りの結果を得ることができます。
<p>あああああああああ</p>
</div>_ -
HTMLファイルにおいて、タグの検索処理に時間(数秒程度)を要する場合があります。そのようなとき、ウィンドウタイトルが処理中の表示になります。
この表示が動いていれば、少なくともフリーズはしていません。少し待ってやってください。
ただ、無限ループに陥っている可能性もあります。(爆)
数秒待ってもプロペラが回りっぱなしの場合は、ESC押下で止めてください。大切なファイルを壊さないためにも、セーブはマメにしましょう。d(^ ^; - ファイル種別の判定は、拡張子をベタにチェックしています。カスタマイズしたい人は、(そんなこと思う人はプログラマな人だと思うので)ソースを見てください。処理部の先頭でチェックしているので、見れば一撃でわかると思います。
更新履歴
xenter-history.txt を参照してください。