Coda 2.5が公開されましたねー。
(2014年10月16日に公開)

Panic Blog » Coda 2.5をご紹介します
http://www.panic.com/blog/ja/introducing-coda-2-5-j/

 

Sublime Textが人気な昨今ですが私個人はCoda派なので、引き続きCodaを使い続けますし、引き続きCodaを応援しています!

さて、ちょっと作りたいものがあって、Codaプラグインの作り方を調べたのでメモ。

オフィシャルドキュメントは下記ページを参照。

Coda プラグインを作成する
http://panic.com/jp/coda/plugins-dev.html

日本語のドキュメントがなくなってた…。
わかりやすいドキュメントだっただけに残念…。

英語のドキュメント(ってほどでもないけど…)は下記。

panicinc/CodaPluginKit
https://github.com/panicinc/CodaPluginKit

Codaプラグインを作る前に

自分が作りたいプラグインがすでに誰かによって作られていないか調べておくことで、「プラグイン作ってみたけどすでにあるじゃん!」ってならなくて済みます。

とりあえず、オフィシャルサイトのプラグイン一覧と、Githubで「coda plugin」で検索しておけばいいのかなぁと思っています。

Coda Plug-ins
http://panic.com/coda/plugins.php#Picks

Search · coda plugin
https://github.com/search?q=coda+plugin&type=Repositories&ref=searchresults

→ Githubのほうは結構数が多いので、全部に目を通すのは大変かも。

Codaプラグインの作り方の種類

Codaプラグインの作り方は下記の二種類。

  • 「CocoaプラグインAPI」を使用する
  • 「Coda Plug-in Creator」を使用する

CocoaプラグインAPI」のほうが複雑なことができて動作が速いけど、CocoaってことはXcodeでObjective-C(今はSwift?よくわかってない…。)を書かないといけないので、敷居が高い。(現時点では私はObjective-Cをほとんど書いたことがない。)

Coda Plug-in Creator」は「Coda Plug-in Creator.app」っていうMacアプリを起動して、「入出力時に何をするか」「何を入力として受け取って、どのように出力するか」「ショートカットに何を設定するか」をGUIで作ることができて、実際の処理は好きなプログラム言語で書くことができる。

Codaプラグインの環境変数を表示するプラグインを書いてみる

Codaプラグインの環境変数を文書中に出力するプラグインをいくつかのプログラム言語で書いてみました。

環境変数は下記の通り。

CODA_BUNDLE_PATH
プラグインバンドルへのパス
CODA_BUNDLE_SUPPORT
プラグインバンドルに含まれるサポートディレクトリへのパス(サポートファイルを使用した場合)
CODA_FILEPATH
編集された書類のファイル名を含むフルパス。未保存の書類の場合は空
CODA_LINE_ENDING
ソース書類の末端で使用されている文字(CR、LF、CR+LF等)
CODA_LINE_INDEX
選択されている行のキャラクタインデックス
CODA_LINE_NUMBER
現在の行番号
CODA_SELECTED_TEXT
選択されているテキスト部分
CODA_SITE_LOCAL_PATH
書類が含まれているサイトへのフルローカルパス。サイト設定を利用していない場合、またはサイト設定のローカルパスが未設定の場合は空
HOME
現在のユーザのホームディレクトリへのパス

 

プログラムと実行結果は下記。

shell

プログラム

#!/bin/sh

echo CODA_BUNDLE_PATH: $CODA_BUNDLE_PATH
echo CODA_BUNDLE_SUPPORT: $CODA_BUNDLE_SUPPORT
echo CODA_FILEPATH: $CODA_FILEPATH
echo CODA_LINE_ENDING: $CODA_LINE_ENDING
echo CODA_LINE_INDEX: $CODA_LINE_INDEX
echo CODA_LINE_NUMBER: $CODA_LINE_NUMBER
echo CODA_SELECTED_TEXT: $CODA_SELECTED_TEXT
echo CODA_SITE_LOCAL_PATH: $CODA_SITE_LOCAL_PATH
echo HOME: $HOME

実行結果

CODA_BUNDLE_PATH: /Users/username/Library/Application Support/Coda 2/Plug-ins/PrintEnv.codaplugin/Contents/Resources/AD3A8F1D-A57D-4D2A-9961-60126F6A1264
CODA_BUNDLE_SUPPORT: /Users/username/Library/Application Support/Coda 2/Plug-ins/PrintEnv.codaplugin/Contents/Resources/AD3A8F1D-A57D-4D2A-9961-60126F6A1264/Support Files
CODA_FILEPATH:
CODA_LINE_ENDING:
CODA_LINE_INDEX: 0
CODA_LINE_NUMBER: 1
CODA_SELECTED_TEXT:
CODA_SITE_LOCAL_PATH: /Volumes/Macintosh HD/Users/username/Works/test
HOME: /Users/username 

PHP

#!/usr/bin/php
<?php
var_dump($_ENV);
?>

実行結果

array(25) {
  ["CODA_BUNDLE_PATH"]=>
  string(134) "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/403682A7-7C0F-4F9A-87EB-829538ECB429"
  ["SSH_AUTH_SOCK"]=>
  string(28) "/tmp/launch-AmB9Fv/Listeners"
  ["TM_BUNDLE_SUPPORT"]=>
  string(148) "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/403682A7-7C0F-4F9A-87EB-829538ECB429/Support Files"
  ["TM_SELECTED_TEXT"]=>
  string(0) ""
  ["TM_LINE_INDEX"]=>
  string(1) "0"
  ["__CHECKFIX1436934"]=>
  string(1) "1"
  ["Apple_PubSub_Socket_Render"]=>
  string(25) "/tmp/launch-jkIfyk/Render"
  ["CODA_BUNDLE_SUPPORT"]=>
  string(148) "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/403682A7-7C0F-4F9A-87EB-829538ECB429/Support Files"
  ["TM_LINE_NUMBER"]=>
  string(1) "5"
  ["LANG"]=>
  string(11) "en_US.UTF-8"
  ["SHELL"]=>
  string(9) "/bin/bash"
  ["LC_CTYPE"]=>
  string(11) "en_US.UTF-8"
  ["PATH"]=>
  string(29) "/usr/bin:/bin:/usr/sbin:/sbin"
  ["CODA_LINE_NUMBER"]=>
  string(1) "5"
  ["TM_BUNDLE_PATH"]=>
  string(134) "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/403682A7-7C0F-4F9A-87EB-829538ECB429"
  ["CODA_LINE_ENDING"]=>
  string(1) "
"
  ["HOME"]=>
  string(13) "/Users/username"
  ["TMPDIR"]=>
  string(49) "/var/folders/82/xr64d58x1hj0qkldkmn5bnm00000gn/T/"
  ["CODA_FILEPATH"]=>
  string(140) "/Volumes/Macintosh HD/Users/username/Library/Caches/Cleanup At Startup/Coda Plug-in Creator/403682A7-7C0F-4F9A-87EB-829538ECB429/print_env.php"
  ["TM_FILEPATH"]=>
  string(140) "/Volumes/Macintosh HD/Users/username/Library/Caches/Cleanup At Startup/Coda Plug-in Creator/403682A7-7C0F-4F9A-87EB-829538ECB429/print_env.php"
  ["CODA_LINE_INDEX"]=>
  string(1) "0"
  ["USER"]=>
  string(6) "username"
  ["LOGNAME"]=>
  string(6) "username"
  ["CODA_SELECTED_TEXT"]=>
  string(0) ""
  ["__CF_USER_TEXT_ENCODING"]=>
  string(10) "0x1F5:1:14"
}

Ruby

#!/usr/bin/ruby

for $value in ENV do
  print "#{$value}\n"
end

実行結果

["CODA_BUNDLE_PATH", "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/970C2E11-33C9-468F-9389-F6B9AC20A356"]
["SSH_AUTH_SOCK", "/tmp/launch-AmB9Fv/Listeners"]
["TM_BUNDLE_SUPPORT", "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/970C2E11-33C9-468F-9389-F6B9AC20A356/Support Files"]
["TM_SELECTED_TEXT", ""]
["TM_LINE_INDEX", "0"]
["__CHECKFIX1436934", "1"]
["Apple_PubSub_Socket_Render", "/tmp/launch-jkIfyk/Render"]
["CODA_BUNDLE_SUPPORT", "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/970C2E11-33C9-468F-9389-F6B9AC20A356/Support Files"]
["TM_LINE_NUMBER", "4"]
["LANG", "en_US.UTF-8"]
["SHELL", "/bin/bash"]
["LC_CTYPE", "en_US.UTF-8"]
["PATH", "/usr/bin:/bin:/usr/sbin:/sbin"]
["CODA_LINE_NUMBER", "4"]
["TM_BUNDLE_PATH", "/Users/username/Library/Application Support/Coda 2/Plug-ins/Print Env.codaplugin/Contents/Resources/970C2E11-33C9-468F-9389-F6B9AC20A356"]
["CODA_LINE_ENDING", "\n"]
["HOME", "/Users/username"]
["TMPDIR", "/var/folders/82/xr64d58x1hj0qkldkmn5bnm00000gn/T/"]
["CODA_FILEPATH", "/Volumes/Macintosh HD/Users/username/.gitignore_global"]
["TM_FILEPATH", "/Volumes/Macintosh HD/Users/username/.gitignore_global"]
["CODA_LINE_INDEX", "0"]
["USER", "username"]
["LOGNAME", "username"]
["CODA_SELECTED_TEXT", ""]
["__CF_USER_TEXT_ENCODING", "0x1F5:1:14"]

 

コードはGithubに置いておくので、どなたかの参考になれば幸いです。

https://github.com/dounokouno/Print-Env.codaplugin

Codaプラグインの削除方法

Coda 2.5からはCodaの環境設定から削除できるようになってた。
ありがたい。