Panic Coda用プラグイン diff ex - ファイルやテキストの差分表示・補助

  • freeware
  • OSX 10.6.8 以降
  • codaplugin

Codaで開いているファイル単位や選択テキスト単位でdiffを行う為のPanic Coda用補助プラグインです。
Coda2とCoda1で動作します。
デフォルト設定ではopendiff (FileMerge.app) を使用して差分比較を行います。

Codaプラグイン diff ex FileMerge.app

diff exは、harmarさんのdiff.codapluginを参考に作成しました。harmar / coda2-plugin-filediff
機能上の違いは以下です。

  • diffの対象がファイル単位と選択テキスト単位に対応しています。

    ファイル 対 特定テキスト、同一ファイル内のテキスト間比較も可能です。

  • プラグイン実行時にdiffの対象となる書類(ファイル)を保存しません。つまり、編集中のファイルを保存する事無くdiffの対象に出来ます。

    代わりに /tmp 以下に指定テキストの内容が含まれる一時ファイルを作成します。
    使用するdiffツールがFileMerge.appの場合、日本語文字が含まれる可能性を考慮して一時ファイルの文字コードはSJISになる事が有ります。(文字変換無しにする事も可能)
    一時ファイルの寿命・Lifetimeは設定出来ます。

  • Codaで新規に作成した未保存ファイルでもdiffが可能です。
  • diffツール起動時でもCodaをアクティブにする事が可能です。

ダウンロード

diff exをダウンロード
Coda : diff ex をダウンロード
  • version 1.1.4
  • SHA1:77416344a7dc8f777ffe0233320e4c14fbe60a57

リリースノート

1.1.4 : 2013-09-20
diff ex プラグイン・メニュー名「Diff」が Codaの 書式 > 言語モード > Diff とバッティングしていたため、メニュー名を「Diff ex」「Setting…」に変更。( … は半角の3点リーダ、option + ; )
1.1.3 : 2013-09-07
diff exの設定を外部ファイル化しました。
ユーザホームディレクトリに .coda_asazjp/diff_ex-setting.bashを作成します。
diff exプラグイン・メニューが「Diff」「Setting...」になりました。
FileMerge.appなどが持つ既存フィルター設定との重複・バッティング回避用に、一時ファイルの拡張子に接尾語を挿入するオプションを追加
diffにFileMergeを利用し、且つ、文字変換を行う設定の場合の既知の問題に対するオプションを追加
プラグインを続けざまに実行した場合、一時ファイルの名称が重複する場合があった問題を修正
1.0.4 : 2013-09-05
diffツール起動時のCodaの待ち時間が無くなるように修正
1.0.3 : 2013-09-05
DiffMerge.app に対応(使用する場合ソースの編集・コメントアウト解除が必要)
文字変換を使用しないオプションを追加
FileMerge.app 以外のdiffツール使用時ではUTF-8に変換するように変更
日本語ファイル名の場合に一時ファイルの拡張子が付かないのを修正
1.0.2 : 2013-09-04
nkfを使用するように変更(iconvはオプション)

必要環境

日本語含むファイルを取り扱う場合、nkf - Network Kanji Filter または iconv が必要です。(nkfを推奨)
Codaのターミナル又はターミナル.appで which nkf を実行し、パスが表示されない場合、nkfのインストールが必要です。またパスが /usr/local/bin/nkf ではない場合、パスを修正する必要があります。
(日本語を扱わない場合/文字変換を行わない場合、nkfやiconvは不要です。その場合でも設定を変更する必要があります。)

diffツールはFileMerge.appが必要です(変更可能)。OS X 10.7以降の環境の方はXcodeをインストールして下さい。10.6の方はMacに付属しているDVDからDeveloper toolsをインストールするかApple Developerよりダウンロードして下さい。

プラグインのインストール

diff ex.codapluginをダウンロードし、Coda2 (またはCoda1)を指定して開くとインストールされます。

使い方

  • 書類(ファイル)を開き、テキストの範囲選択がされていない状態で 「プラグイン > diff ex > Diff ex」を実行すると、その書類ファイル全体がdiff対象になります。
  • 任意のテキスト範囲を選択した状態で diff exを実行すると、その選択テキスト範囲がdiff対象になります。
  • 「プラグイン > diff ex > Setting…」を実行すると、diff exの設定ファイルが開きます。

もちろん、Codaで開いたリモートファイルもdiffの対象に出来ます。

Diff ex コマンドのショートカットは コントロール+オプション+コマンド+Q です。

htmlやXMLの編集時には、EmmetプラグインのMatch Pair Tag (inward/outward)と併用すると効率的です。

diff ex はbashスクリプトで作成しています。設定ファイルのコメントアウトもbashの記法に沿います。
そのため、動作上必須では有りませんが、Codaの言語モードでbashが使えるようにするために、Coda2-bash-mode をインストールして下さい。
設定ファイルのカラーリングや、設定を修正する際の Codaショートカット コメントアウト(のトグル)が有効になります。(Coda 2.0.10時点)bashモードをインストールしていない場合、Setting…から設定ファイルを開くと行番号が表示されない不具合があります。

diff ex 設定ファイル bash mode

キーボードショートカットの変更

Macの「システム環境設定 > キーボード > キーボードショートカット」から変更する

下記画像のようにショートカットを変更出来ます。

キーボードショートカット1 キーボードショートカット2 キーボードショートカット3

Coda 2 Plug-in Creator.appから変更する

下記のPanicサイトのページ下部からダウンロード出来るプラグイン作成・編集用アプリを利用します。

http://panic.com/jp/coda/plugins.php

diff ex.codapluginをCoda 2 Plug-in Creator.appで開いて編集して下さい。

設定の変更

「プラグイン > diff ex > Setting…」を実行し、設定ファイル diff_ex-setting.bashを編集します。

.bashである理由は、設定ファイルを開いた際にCodaの言語モード bash を自動的に有効にするためです。

※ 設定を変更する際、イコール文字(=)の前後に空白文字を含めないで下さい。

diffツールの設定

デフォルト設定ではFileMerge.app (opendiff)を使用しdiffを行います。
他のdiffツールに変更するには、設定ファイルの5行目(DIFF=〜〜)を任意のパスに変更して下さい。
diffコマンドのオプションを指定する場合、DIFF_OPTION='option1 option2 option3' の形式になります。

### [diff tool] ###
#
DIFF=/usr/bin/opendiff
DIFF_OPTION=''

#DIFF=/usr/bin/diffmerge
#DIFF_OPTION='-ro2'

DiffMerge.appを使用する場合、5,6行目をコメントアウト(行頭に # を追加)し、8,9行目のコメントアウトを解除して下さい。パスが異なる場合は修正して下さい。

FileMerge用の設定(文字変換を行う場合)

設定ファイル 14行目の以下の設定は、FileMergeを使用し、且つ、文字変換を行う設定の場合のみに有効になります。

FM_EXTENSION_PATTERN='html|xml'

テキスト非選択状態から diff ex を実行する時にこの設定が影響します。
FileMergeの表示が空白になる場合、そのファイルの拡張子を追加、又は削除して下さい。

クオート内はパイプ区切りのファイル拡張子のリストです。
1つのリストになる場合は FM_EXTENSION_PATTERN='html' 、リストが0の場合は行をコメントアウトするか FM_EXTENSION_PATTERN='' の形式になります。

文字コード変換コマンドの設定

nkfやiconvのパスを修正するには、設定ファイル内の18,19行目(NKF=〜〜/ICONV=〜〜)を編集します。

### [char converter] ###
#
NKF=/usr/local/bin/nkf
ICONV=/usr/bin/iconv

# select converter 2 = nkf , 1 = iconv , 0 = disable
#
USE_CONVERTER=2

文字コード変換にnkfを使用する場合、上記のままで構いません(23行目 USE_CONVERTER=2)。

文字変換を一切行わない場合は USE_CONVERTER=0 です。

version 1.0公開後の調査で iconvだとソース中のバックスラッシュ文字の比較が出来ない事が分かったため、初期設定ではnkfを使用するように変更しました。FileMerge上ではバックスラッシュ \ は ¥マークで表示されます。

一時ファイルのLifetimeの変更

diff ex 実行時に作成される一時ファイルの寿命・Lifetimeは、デフォルトでは2分に設定されています。
A-B比較を行う際、2分以上前の一時ファイル"A"は破棄され、新規に"A"が作成されます。
変更が必要な場合、設定ファイルの29行目(LIFETIME=〜〜)を任意の文字列に変更して下さい。

### [temp file] ###
# 2M = 2 Minutes
#
LIFETIME=2M

一時ファイルの寿命を30秒にする場合は LIFETIME=30S です。

一時ファイルの拡張子の設定

USE_CONVERTER=2 または 1 の場合で、且つ、日本語文字が含まれる場合、文字変換済みの一時ファイルを作成します。(opendiffを指定している場合はSJIS、それ以外のdiffツールではUTF-8に変換されます)
ここで、拡張子を持つファイルを対象にdiffを行う場合、例えばFileMergeの既存フィルター設定とバッティングする事が考えられます。

filemerge filters

それを回避するために、拡張子自体に接尾語を追加するオプションを有効にする事が出来ます。(設定ファイル 36行目 TMPFILE_EXTENSION_SUFFIX='〜〜')

TMPFILE_EXTENSION_SUFFIX='__'

上記の設定では、例えば html__ という拡張子になります。

※ 但しこの場合、FileMerge上のテキスト(htmlタグなど)に色が付かなくなります。

FileMerge カラーリング有り FileMerge カラーリング無し

この設定が不要な場合、コメントアウトするか TMPFILE_EXTENSION_SUFFIX='' に変更して下さい。

既知の問題

FileMerge固有の問題

コマンド+Aなどによるテキスト全選択状態でプラグインを実行した場合、diffの表示が空白になる場合があります。確信は持てませんが、 <? を含む一部のhtml、xml、phpファイルでこの症状が起こります。
その場合、全選択ではなく、非選択状態からのプラグイン実行(つまり書類全体がdiff対象)を試してみて下さい。