なんか、エディタの話ばっかりでスミマセンw
秀丸 for Macに思いを馳せつつも、いまんとこMacのエディターはCotEditorで落ち着いてます。シンタックスカラーはもちろんのこと、dankogai絶賛の正規表現による検索とか。とてもバランスの良いエディターだと思います。
んで、もっと便利に使える可能性のある機能として「スクリプトメニュー」があるんだけど、これを使いこなせるようになりたいですよね。今回は、普段一番使い慣れているPHPをスクリプトメニューから起動させる手順を紹介します(意外と検索してもヒットしなかった)。
スクリプトメニューの基本的な使い方
PHPでの書き方の前に基本的な使い方をば。
まず、スクリプトは下記ディレクトリに置きます。
~/Library/Application Support/CotEditor/ScriptMenu
スクリプトとして認識されるのは、.applescript .scpt .sh .pl .php .rb .py なので、普通にphpファイルとして保存すればいいですね。
んで、スクリプトファイルには実行権限を与えないといけないので
chmod 755 ~/Library/Application\ Support/CotEditor/ScriptMenu/*.php
とかしてやると良いでしょう。
スクリプトファイルを置いたり、更新した場合は反映させるために、「スクリプトメニューを更新」を実行した方が良いです。
PHPスクリプトの書き方
さて、それでは早速スクリプトを書いてみたいのですが、テンプレートになりそうな簡単なコードを書いてみます。
#!/opt/local/bin/php <?php // %%%{CotEditorXInput=Selection}%%% // %%%{CotEditorXOutput=ReplaceSelection}%%% $stdin = file_get_contents("php://stdin"); $stdout = '/*' . $stdin . '*/'; echo $stdout; ?>
まず、1行目に使用する言語のPATHを記述します。
Macにデフォルトで入っているPHPだと、/usr/bin/php あたりにあるでしょうか?
ボクはMacPortsで入れ直しているので、/opt/local/bin/php になっています。
分からない場合はターミナルから下記コマンドで確認してください。
which php
次に、3〜4行目にCotEditor独自の記述が続きます。
// %%%{CotEditorXInput=Selection}%%% // %%%{CotEditorXOutput=ReplaceSelection}%%%
%%%{CotEditorXInput=xxxx}%%% はCotEditorからPHPに値を渡すルールを記述します。
xxxxに入るコマンドとしては下記があります。
- Selection:現在選択しているテキスト
- AllText:書類のすべてのテキスト
- None:何も渡さない(デフォルト)
コメントを記述しなかった場合、「None」となります。
%%%{CotEditorXOutput=xxxx}%%% はPHPからCotEditorに値を返すルールを記述します。
xxxxに入るコマンドとしては下記があります。
- ReplaceSelection:現在選択しているテキストを出力内容で置き換えます。
- ReplaceAllText:書類のすべてのテキストを出力内容で置き換えます。
- InsertAfterSelection:選択範囲の直後に出力内容を挿入します。
- AppendToAllText:書類の末尾に出力内容を挿入します。
- Pasteboard puts:クリップボードに出力内容を格納します。
- Discard:何もしない(デフォルト)
コメントを記述しなかった場合、「Discard」となります。
5行目では、実際にCotEditorから値を受け取るためのコードが書いてあります。
CotEditorからは標準入力(STDIN)として渡ってくるので、
$stdin = file_get_contents("php://stdin");
php://stdin を読んであげるようにすると値を取得できます。
反対に、phpからCotEditorに値を返す場合は標準出力(STDOUT)になるので、
echo $stdout;
echo とか print とかしてやればいいだけ。
簡単ですね!
さて、折角なのでボクが良く使う便利なスクリプトを3つほど紹介します。
1)HTMLをエスケープするスクリプト:htmlspecialchars.php
ブログ書く時に pre タグにコードを差し込む事が良くあるのですが、HTMLエスケープしないといけないのでスクリプトで変換しています。
#!/opt/local/bin/php <?php // %%%{CotEditorXInput=Selection}%%% // %%%{CotEditorXOutput=ReplaceSelection}%%% $stdin = file_get_contents("php://stdin"); echo htmlspecialchars($stdin,ENT_QUOTES); ?>
dankogaiが「正しい」サンプルをPerlで書いてらっしゃいますが、PHPだとこんなに短い。
わー、PHPってとても便利な関数があるんですねー(棒読み)
2)複数行のテキストをULリスト化するスクリプト:UL.php
これまた、ブログ書く時によく書くのがULタグ。結構めんどいのでスクリプトにおまかせ。
#!/opt/local/bin/php <?php // %%%{CotEditorXInput=Selection}%%% // %%%{CotEditorXOutput=ReplaceSelection}%%% $list = file("php://stdin"); $res = "<ul>\n"; foreach ( $list as $line ) { $line = trim($line); if ( empty( $line ) ) { continue; } $res .= "<li>" . $line . "</li>\n"; } $res .= "</ul>\n"; echo $res; ?>
たとえばこんなテキスト↓を選択して「UL」スクリプトすると、
あああ いいい ううう
こんな感じ↓に変換してくれます。
<ul> <li>あああ</li> <li>いいい</li> <li>ううう</li> </ul>
ul 部分を ol に書き換えれば「OL.php」(番号付きリスト)も簡単に作れますね。
3)CSVをTableタグに変換するスクリプト:csv2table.php
ブログではあんまりtableタグ使わないけど、表形式にまとめる時のtableタグ書く面倒臭さといったらもう。ということでスクリプトで。
#!/opt/local/bin/php <?php // %%%{CotEditorXInput=Selection}%%% // %%%{CotEditorXOutput=ReplaceSelection}%%% $handle = fopen("php://stdin", "r"); $res = "<table>\n"; while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $res .= "<tr>"; $res .= "<td>" . implode("</td><td>",$data) . "</td>"; $res .= "</tr>\n"; } $res .= "</table>\n"; fclose($handle); echo $res; ?>
たとえばこんなテキスト↓を選択して「UL」スクリプトすると、
aaa,bbb,ccc 1,2,3 "あああ","いいい","ううう"
こんな感じ↓に変換してくれます。
<table> <tr><td>aaa</td><td>bbb</td><td>ccc</td></tr> <tr><td>1</td><td>2</td><td>3</td></tr> <tr><td>あああ</td><td>いいい</td><td>ううう</td></tr> </table>
ちょっといじればタブ区切りのTSVファイルにも対応できますね。
まとめ
今回は、テキスト変換系のサンプルばかり紹介したんですが、プログラムの書き方によっては何でもできちゃいますね。
また、なんか便利そうなスクリプト思い付いたら紹介しますね。