Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

Software 技術情報

CotEditorのスクリプトメニューでPHPを起動する方法(便利なサンプル3つ付き)

投稿日:


なんか、エディタの話ばっかりでスミマセン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ファイルにも対応できますね。

まとめ

今回は、テキスト変換系のサンプルばかり紹介したんですが、プログラムの書き方によっては何でもできちゃいますね。
また、なんか便利そうなスクリプト思い付いたら紹介しますね。

-Software, 技術情報

執筆者:


comment

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

関連記事

500円で作れるフォトブック「TOLOT」を試してみた

間接的に以前から知っていた会社が「TOLOT」というフォトブックサービスを初めていたのですが、1冊500円というありえない低価格で作れるとあって大注目していました。で、サービス開始直後はiPhone/ …

Mii Editor で似顔絵作った

会社でMii Editorなるものがあると聞いて試してみたらナカナカ面白かったので、自分の似顔絵も作ってみる事にした。  ・Mii Editor: Create and Edit Mii Charac …

ミクシィ【毎月1冊無料】のフォトブック「nohana」が届いたので早速レポート

先日作成したフォトブック「nohana」が先ほど手元に届きましたので、早速仕上がりをチェックしたいと思います。 ・nohana(ノハナ) | 毎月1冊無料で手に入るフォトブック

百度(Baidu)ファーストハッキング

タイトルは釣りです。ゴメンナサイ。 1/23に中国産の検索エンジン「百度(baidu)」が日本でのサービスを本格開始しましたね。エロに強いだとか、MP3検索どうした?とか、ちょっと横道な話題が多い気が …

facebookはじめました

Facebook | Takahito Yagami 「冷やし中華はじめました」には少し早いのでfacebookはじめました(嘘 よろしければお気軽に友達登録お願いします。 (小心者なので直接面識のあ …

スポンサードリンク

スポンサードリンク