ZenCoding with mi
2013-11-05 更新ご注意:
2013.5.30追記 miの最新版、mi3ではZencodingの機能が実装になりました。この記事で取り上げている内容よりも豊富な機能を提供しています。ぜひmi3を使ってください。mi3のZencoding機能を使う方法
機能の呼び出し方は、ドキュメントモードを[HTML]か[HTML5]に設定した上で、展開したい箇所を選択して(Control+Command+E)を押します。
ドキュメントモードの設定方法はドキュメントウィンドウ上部のプルダウンリストから選択するか、メニューバーから[ドキュメント]>[モード]>[HTML5]/[HTML]を選択します。
メニューバーから[ツール]>[HTML]>[_zencoding]を選択すると、下図のような展開以外の機能を呼び出すことができます。
この記事は、役割を終えたことになります。
miでもZenCodingしたい
と思い続けていたところ、Jedit Xで動作させている記事を発見しました。
この記事によれば、作者のmakogさんは、OtchyさんのZencodingのPerlモジュール実装を使って、Jedit XのマクロをAppleScriptで作成したそうです。アクションの内、省略記法の展開が使えるようになっています。 おお、素晴らしい、miで使うのに一気に敷居が下がりました。
そこで、この記事を参考にmi用にAppleScriptを書き起こしました。miのツールにzencodingの機能を追加できました。
図 1. 完成図はじめにご理解いただきたいこと
この記事で作成するアプリケーションは、Mac OS X 10.7.4、このOSに付属しているPerl 5.12.3とAutomator 2.2.4を使って作成し、mi 2.1.12r1で動作確認しました。利用環境の違いによっては動作しない場合も予想されます。この記事は、自分の環境で動作するように一人で修正できる方に向けて書いています。
準備作業
前提条件としてSSSCoding.pmのインストールが必要です。 このPerlモジュールのインストール先は、たとえばターミナルから次のコマンドで調べることが出来ます。
perl -e 'print $i++ . ":" . "$_\n" foreach @INC'Mac OS X 10.7 では、/Library/Perl/5.12 でした。
mi用AppleScriptの作成
miのヘルプの説明を参考にAppleScriptを次のように書きました。
tell document 1 of application "mi"
set startP to index of paragraph 1 of selection object 1
set endP to startP + (count paragraph of selection object 1) - 1
repeat with i from startP to endP
set str to paragraph i
set res1 to do shell script "perl -e 'chomp($ARGV[0]);print $ARGV[0];'" & " " & quoted form of str
set res to do shell script "perl -MSSSCoding -e 'print SSSCoding::expand($ARGV[0]);'" & " " & quoted form of res1
set paragraph i to res & (ASCII character 10)
end repeat
end tell
インストール
このスクリプトをAppleScript エディタで、スクリプト(.scpt)形式で保存します。 そのファイルを、モード設定ウインドウ→ツールタブの左側のツール一覧にドラッグすると使えるようになります。
図 2. インストール先-モード設定ウィンドウ
手作業でインストールする場合は、標準モードのツールとして使うなら、
~/Library/Application Support/mi/mode/Normal/tool
になります。
ZenCodingの省略記法した箇所を選択して、メニューからツール-zencodingと選択してツールを実行するすると、選択範囲が展開されます。また、コンテクストメニューからも同様に選択して実行できます。(図 1. 完成図 参照) これで、miでZenCodingするという目的が達成できました。
なお、今回実装した省略記法の展開以外にも、ZenCodingのアクションには、編集箇所の移動など便利な機能が含まれています。
完成品も用意しました
GitHubにscptファイルの完成品を置きました。ところが
作っているうちに、これをautomatorのサービスにした方が便利なのでは感じるようになりました。miに限らずどこでも使えるし。そこで次の記事では、automatorサービスを作る方法を紹介します。
ありがとう
Perl実装したOtchyさん、Jedit Xマクロを書いたmakogさん、素晴らしい。 たったAppleScript10行でやりたいことが出来てしまった。ありがとうございます。
このブログを建てて記事を書いたのは、お二方に対する感謝の気持ちであります。