スポンサーリンク
2013年11月25日
前の記事で、Sublime Text2からCoda2へ移行しようかな、という内容を書きました。その際にSublime Textで利用していたプラグイン’SublimeOnSaveBuild’と同じ、保存時の自動ビルド(コンパイル)がCodaでもできるかどうか色々試した記録です。
何ができるかというと、指定した拡張子(Settingsファイルで設定)のファイルを保存すると、自動的にビルドが実行(Command+B)されます。できることは単純ですが応用の効くとても便利なプラグインです。
私の場合、markdownファイルの保存と同時にコンパイルを実行してhtmlを出力するようにしていました。ビルドファイル次第で、保存時に何でもできるので便利です。
(できると思いますが)保存と同時に何かを実行するという方法を見つけることができませんでした。Panicのサイトに、保存時にAntを実行するBuildOnSaveというプラグインはあるのですが、バイナリがなくコンパイルが必要でした。それより、なぜAnt?・・・という感じです。
Antは主にJavaの開発で使いますが、実行環境がJavaというだけで、なんでもできるビルドツールです。
昔とった杵付と思えないほど忘れていましたが、compassを実行するbuild.xmlを書いてみました。terminal.appでbuild.xmlのあるディレクトリで”ant”と実行すると、cssファイルが作成されます。当然、Compassが必要で、config.rbも必要です。
ここまではよかったのですが、肝心のBuildOnSaveが私の環境だとコンパイルしても動きませんでした。なんとなく動いているような感じはあるのですが、Looking for build.xmlというメッセージが出たまま止まります。何か情報がないかと調べましたが、どうもサイト(プロジェクト?)単位で管理されていて、何が保存されても実行される作りなので、使い勝手が悪いと思いあきらめました。
さすがにプラグインを作るのは時間がかかりそうなので、次善の策となりますが、AppleScriptを試すことにしました。とりあえずkramdown(markdown拡張)をコンパイルするAppleScriptを書いてみました。このscptファイルを、”~/Library/Scripts/Applications/Coda 2/”に保存します。メニューから「スクリプトを再読み込み」を実行すると、追加したAppleScriptがメニューに登録されます。
保存時(Command+S)に自動コンパイルとまではいきませんが、環境設定のキーボードで適当なショートカットを設定すると、キーボード操作(ショートカットキー)でコンパイルを実行できます。
パスやファイル名の取得方法を色々と試しながら書いたので、不要なコードが含まれています。といっても、AppleScriptとShellScriptとのどちらで取得するかの違いなので、利用する場合は適当に削除して下さい。
-- script settings on CodaScriptSettings() return {displayName:"kramdown", inContextMenu:"yes"} end CodaScriptSettings -- actual script tell application "Coda 2" try -- 現在開いているファイルのパスを取得する。標準形式 set filePath to file of contents of selected split of selected tab of front window -- alias形式に変換 set aliasPath to filePath as alias -- UNIX形式に変換 set posixPath to (filePath)'s POSIX path -- POSIX path of filePathでも可 -- AppleScript -- fileName(baseName+extension) set fileName to getNameByAs(filePath) of me -- baseName set baseName to getBaseNameByAs(filePath) of me -- extension set extension to getExtensionByAs(filePath) of me -- directory set directory to getDirectoryByAs(filePath) of me -- set posixDir to POSIX path of directory -- UNIX形式に変換 -- Shell script -- fileName(baseName+extension) set fileName to getNameBySh(filePath) of me -- baseName set baseName to getBaseNameBySh(filePath, "markdown") of me -- extension set extension to getExtensionBySh(filePath) of me -- directory set directory to getDirectoryBySh(filePath) of me tell current application -- kramdownコンパイル set sourcePath to quoted form of (POSIX path of filePath) set targetPath to quoted form of (directory & "/html/" & baseName & ".html") do shell script "kramdown " & sourcePath & " > " & targetPath end tell on error message display dialog message end try end tell -- basename+extension on getNameByAs(filePath) set fileName to "" tell application "Finder" set fileName to name of (filePath as alias) end tell return fileName end getNameByAs -- basename on getBaseNameByAs(filePath) set baseName to "" tell application "Finder" set len to (length of (name extension of (filePath as alias) as text)) + 2 set baseName to items 1 thru -len of (name of (filePath as alias) as text) as text -- -lenで後方カウント end tell return baseName end getBaseNameByAs -- extension on getExtensionByAs(filePath) set extension to "" tell application "Finder" set extension to name extension of (filePath as alias) end tell return extension end getExtensionByAs -- directory(alias) on getDirectoryByAs(filePath) set directory to "" tell application "Finder" set directory to folder of (filePath as alias) as alias end tell return directory end getDirectoryByAs -- Shell script -- basename + extension on getNameBySh(filePath) set posixPath to POSIX path of filePath -- (filePath)'s POSIX pathでも可 -- set fileName to do shell script "n=" & (posixPath)'s quoted form & ";echo "${n##*/}"" -- quoted form of posixPathでも可 set fileName to do shell script "basename " & quoted form of posixPath return fileName end getNameBySh -- basename on getBaseNameBySh(filePath, extension) set posixPath to (filePath)'s POSIX path -- set baseName to do shell script "n=" & quoted form of (getNameBySh(filePath) of me) & ";echo "${n%.*}"" set baseName to do shell script "basename " & quoted form of posixPath & " '." & extension & "'" return baseName end getBaseNameBySh -- extension on getExtensionBySh(filePath) set posixPath to (filePath)'s POSIX path set extension to do shell script "n=" & quoted form of posixPath & ";echo "${n##*.}"" return extension end getExtensionBySh -- directory on getDirectoryBySh(filePath) set posixPath to (filePath)'s POSIX path -- set directory to do shell script "n=" & quoted form of posixPath & ";echo "${n%/*}"" set directory to do shell script "dirname " & quoted form of posixPath return dir end getDirectoryBySh
下記のサイトを参考にしています。
結局、Sublime Textを使っているのですが、CodaもApple scriptでなんでもできますね。と思ったら、Sublime TextでもApple Scriptを使えそうです。Codaのメリットがなくなっていく・・・ただ、FTPとGitはGUI込で便利だと思います。もう少しプラグインが豊富にあればCodaでいいかなと思うのです。Sublime Textは無骨というか硬派というか可愛げがありません。