秀丸のZen-Codingマクロで、aタグ・hタグの後ろに改行を入れさせない

Windows向けの定番エディタとして有名な秀丸エディタですが、HTMLを高速にコーディングする為のマクロとしてZen-Codingマクロが提供されています。
秀丸マクロでZen-Coding


このマクロを導入すると、HTMLのタグ打ちが非常に速くなるのですが、
しばらく使っていると、細かい使い勝手が気になる様になってきました。

例えば、リンクを貼りたいときにaタグをマークアップさせると…


このように、開始タグの後ろに改行が入ってしまいます。




またh1~h6タグの場合も


開始・終了タグが独立行になり、タイトル文字にインデントが入ります。




上記の振る舞いは、元々のzen-codingとしては正しいのかもしれませんが、個人的には、これらのタグの前後に改行が入るとソースが間延びして見づらくなってしまうので、a,hタグの前後には改行を入れたくない派です。

なので、これを直すために、今までエディタで以下のように修正していました。





修正の手間はわずかなのですが、頻度が多いし、そもそもZen-Codingがマクロで置換を掛けているものなので、プログラムが整形したものを人が再整形するのもおかしな話です。
なので、マクロに手を入れて上記のa,hタグの場合に限り、改行を入れないように改変してみました。


※補足:ちなみに設定ファイルのzenhtml.iniで、改行・インデントの有無は設定できるっぽいのですが、今回はh,aタグのときだけ振る舞いを変えたいという、ワガママ仕様なのでマクロ自体を変更します。

; yes: 改行・インデントしてソースを整形する(推奨)
; no:  整形しない
use-indent = yes






というわけで、今回の修正は以下の場所です。
もっとスマートな修正方法があるかもしれませんが、マクロ全体の流れを追うのも面倒なので、
適用が楽な所にパッチを当てる事にしました。

修正は2ファイルです。

まずは、zenhtml.macの640目付近にあるIndentEachLine関数。
元々は、以下の記述だったのを…

    IndentEachLine: // $$1: stri
                    // $$2: baseindent
    ##indenterSize = strlen($indenter);
 
    call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "]>\n<!--","]><!--"; if ($$return != "") $$1 = $$return;
    call CountLines $$1; ##linelen = ##return;
 
    $$src = $$1 + "\n";
 
    ...



このように変更します。

IndentEachLine: // $$1: stri
                // $$2: baseindent
    ##indenterSize = strlen($indenter);
 
    call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "]>\n<!--","]><!--"; if ($$return != "") $$1 = $$return;
    call CountLines $$1; ##linelen = ##return;
 
    // add 2012/05
    call ReplaceAll $$1, "<a href=\"\">\n","<a href=\"\">"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h1>\n","<h1>"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h2>\n","<h2>"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h3>\n","<h3>"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h4>\n","<h4>"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h5>\n","<h5>"; if ($$return != "") $$1 = $$return;
    call ReplaceAll $$1, "<h6>\n","<h6>"; if ($$return != "") $$1 = $$return;
 
    $$src = $$1 + "\n";
 
    ...



この関数では、下記の場所でタグの切れ目に改行を入れています。

call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return;


なので、その直後で、特定のタグの場合に限り追加された改行を削除しています。




2つ目の修正は、zenhtml.iniの290行目付近にある、各タグの要素を定義している箇所。
hタグがblock要素として定義されているのを、強制的にinlineに変更します。

h1         = block
h2         = block
h3         = block
h4         = block
h5         = block
h6         = block




h1         = inline
h2         = inline
h3         = inline
h4         = inline
h5         = inline
h6         = inline



マクロの方で、block要素のタグを挿入する場合は、タグの前後で改行した上で、その中身をインデントするというロジックになっています。なので、h1~h6タグはinlineであると騙す事によって該当のコードが走るのを抑制します。


上記2点の変更で、無事期待する動作に替わりました。
これでさらに高速にマークアップが出来る様になりそうです。



今回の改造は2箇所だけなので大した手間では有りませんが、元ネタがGPL3だったので、改変版を公開しておきます。改変版のライセンスは、勿論GPL3です。

というわけで、本マクロをダウンロードした方は以下のことを自由に行う事が可能です。

1.プログラムの実行
2.プログラムの動作を調べ、それを改変すること
3.複製物の再頒布
4.プログラムを改良し、改良を公衆にリリースする権利



ダウンロード:zencoding-macro-v0.5.6_kai

関連記事

コメントを残す

メールアドレスが公開されることはありません。