# 概要

フォルダやファイルを比較するツール。ファイルや行のコピー・削除、ファイルの編集も可能です。

* ２つのフォルダ、または２つのファイルを比較し、左半分と右半分に色つきで差異を表示します。
* 差異のある行/差異のない行/左のみの行/右のみの行を、それぞれ省いたり組み合わせて表示できます。
* タブバー形式で複数の比較対象を切り替えて表示できます。
* 各タブで比較しているファイルやフォルダの組を比較リストとしてファイルに保存し、再度表示できます。
* フォルダ比較表示の際、選択したファイルを左右間でコピー・削除ができます。その際、元のファイルを自動でバックアップします。
* フォルダ比較表示の際、ファイル名の異なるファイル同士を、手動で位置変更して比較する事ができます。
* ファイル比較表示の際、編集ボタンで編集可否が変更できます。編集可の場合、直接編集したり、選択行の左右間コピー・行削除などができます。
* ファイル比較表示の際、編集したファイルを保存する際、元のファイルを自動でバックアップします。
* ファイル比較表示の際、ツールが自動判定した左右の行の組み合わせを、手動で位置変更できます。
* ファイル比較表示の際、ファイルの一部を別の位置に動かして比較する事ができます。部分的に移動編集したファイルを比較する場合に便利です。
* ファイル比較表示の際、文字コードを自動判定して、UTF8ベースで比較する事ができます。
* 設定ファイルでメニューやメッセージの言語切り替えができます。英語と日本語を用意していますが、翻訳ファイルを記述すれば他言語も可能です。


# 属性

	$Program:		Differ
	$Filename:		Differ.exe
	$Description:	Folder and File Compare Tool
	$Company:		Nobuyuki Kobayashi
	$Copyright:		(C) Nobuyuki Kobayashi.


# 履歴

	$Version:
	1.00.2014.0324: フォルダ比較版作成。仮リリース。
	1.01.2014.0626: ファイル比較に対応。本リリース。
	1.02.2014.0908: ２ウィンドウ間でのタブ移動に対応。
	1.03.2014.0910: 行内容の詳細比較表示と編集に対応。
	1.04.2015.0401: タイトルバーメニューからのReadMe表示を追加
	1.05.2015.0405: タブグループの保存機能を追加
	1.06.2015.0422: Reload Allボタンを追加
	1.07.2015.0510: タブ領域へのグループファイルドロップ機能を追加
	1.08.2015.0523: Ctrl+W押下でのタブ削除を追加
	1.09.2015.0716: タブのスクロールボタンを廃止し、摘んでスクロールに変更
	1.10.2015.0816: ShiftJISのダメ文字を含むパス名処理でのバグを修正
	1.11.2015.0824: 行エディタ部分での文字削除時のカーソル移動不具合を修正
	1.12.2015.1220: ファイルのプロパティ表記に対応。
	1.13.2016.0815: ZIP圧縮時にファイル時刻が秒単位になる事への対応(ファイル時刻比較の修正)。
	1.14.2016.1016: ボタン文字列、メニュー文字列の変更。ファイル比較へのフィルタ引き継ぎ停止。
	1.15.2016.1119: 変数が多重で生成されていたのを修正。
	1.16.2017.0226: ボタンに、Copy newer xxとDelete only xxを追加。
	1.17.2017.0814: シフトキーを押しながら起動すると、メインスクリーンの中央に表示される機能を追加。
	1.18.2017.1019: スレッド終了処理とファイル検索(->FindFirstFileEx)を差し替え。
	1.19.2017.1202: ファイル比較にバイナリ表示を追加。iniファイル内での拡張子の記述方法を変更。
	1.20.2017.1221: ファイルやフォルダをオープンするメニュー項目を追加。
	1.21.2018.0129: コピーをWindows APIから自前版に変更。
	1.22.2018.0131: VC++2015に変更。
	1.23.2018.0225: MAPファイルを生成するように変更。
	1.24.2019.0224: ライブラリを更新。
	1.25.2019.0630: Stringライブラリを更新。
	1.26.2019.0715: バックアップからの復元ダイアログ機能を追加。
	1.27.2020.0225: Groupファイルの読み込み時に片方のフォルダが存在しない場合もタブを生成するように修正。
	1.28.2020.0227: ライブラリを更新。
	1.29.2020.0326: メッセージをダイアログ下部に移動した。
	1.30.2020.0715: LayerRuleの読み込み構成を変更。
	1.31.2020.0729: 内部文字コードをUTF8に変更。
	1.32.2020.0729: EditBoxの拡張に対応。
	1.33.2020.0810: 公開用にReadMe等を変更。
	1.34.2020.0811: 文字コードを自動変換するように変換。
	1.35.2020.0824: ファイルの文字コードを自動判別できない場合にERRORになるバグを修正。
	1.36.2020.0828: 行編集領域のタブ位置が都度更新されないバグを修正。
	1.37.2020.0829: 手動での合致判断箇所が比較時に反映されない場合があるバグを修正。
	1.38.2020.1021: 設定ファイルの文字コードを維持するように修正。
	1.39.2020.1029: フォルダ比較表示のシンプル表示モードを削除。
	1.40.2021.0811: ウィンドウ位置をPrimary Screenに移動するメニューを追加。
	1.41.2021.1107: フォント設定時の詳細表示領域のサイズ変更を追加。
	1.42.2021.1108: カラーサイドバーの高さを変更。表示を高速化。。
	1.43.2021.1108: バイナリ表示で左側の表示が右側にはみ出すバグを修正。
	1.43.2021.1110: テキストファイルの比較方法を改善。
	1.44.2021.1220: DeleteSideボタンを削除。
	1.45.2021.1221: マウスによる行ドラッグで、Connect できるようにした。
	1.46.2022.0105: マウスによる行ドラッグで、Float できるようにした。
	1.47.2022.0227: メニュー選択で、ConnectとFloatのドラッグ状態に移行できるようにした。
	1.48.2022.0228: 起動時に接続されているディスプレイ外に表示されている場合はメインスクリーンの中央に再配置するようにした。
	1.49.2022.0302: システムメニュー選択によるヘルプ表示を追加。
	1.50.2022.0410: 日本語表示用言語ファイルを作成。
	1.51.2022.0707: ファイルの末尾が片方しかない場合、ファイル比較時に片方しかない場合、の表示が抜けていたバグを修正 (Connect/Floatバグ)。
	1.52.2023.0601: タイトルメニューにフォント選択等を追加。マニュアル指定方法を変更。
	1.53.2023.0823: フォルダ比較時にコネクト操作を可能にした。
	1.54.2024.0503: コンパイラを更新。ライブラリ層を更新。
	1.55.2024.0907: 言語自動選択機能を追加。タイトルメニューに言語選択項目を追加。
	1.56.2024.0914: 言語ファイルを更新。
	1.57.2025.0626: 親フォルダを開く機能を追加。
	2.00.2025.0818: テキストファイルの比較アルゴリズムを改良。
	2.01.2025.0823: テキストファイルの比較表示時に、各行の差異部分も濃い背景色で表示するようにした。
	2.02.2025.0910: 横スクロール機能を追加。左右分割位置変更機能を追加。キーボードアサインを変更。
	2.03.2025.1118: ファイル編集をリスト領域で実施するように変更。テキスト編集機能を刷新。詳細表示領域での編集は廃止。
	2.04.2025.1219: フォルダ/ファイルのコピー方法を同一化に変更。同一判定の項目はコピーしない。コピー先にのみ存在する項目はバックアップに移動する。
	2.05.2025.1226: フォルダバックアップの仕方を変更。バックアップダイアログの仕様を見直し。
	2.06.2026.0213: キー割り当て機能を導入。フォント指定をタイトルメニューに移動。
	2.07.2026.0319: 文字列置換機能を追加。編集等ボタンの初期値設定を可能化。
	2.08.2026.0329: メニュー表示コマンドを追加。


# コマンドライン指定

	Differ.exe -g グループファイル			... SavePairsボタンで保存した全タブの表示項目の組を記述したファイルを読み込みます。他の引数は無視されます。 
	Differ.exe パス名1 [パス名2]			... パス名1とパス名2を比較対象として表示します。パス名2を指定しない場合は、左側の枠にパス名1だけを表示します。

* 前回表示位置とサイズを記憶しますが、サブディスプレイに表示していてサブディスプレイが無くなった場合などは、メインスクリーンの中央に再配置します。
* ウィンドウメニューから「Move to primary screen.」を選択した場合も、メインスクリーンの中央に再配置します。


# GUIの説明

本プログラムの主ダイアログは下図の通りです。
以降の説明にあるボタン名やメニュー名は、選択言語が英語の場合の表記になっています。
日本語を選択している場合は適宜読み替えてください。

![主ダイアログ](Images/Differ_Main_Dialog.png)


## リスト表示部(比較内容表示部)

* 比較する２つのフォルダ、またはファイルを、左半分(Side1)と右半分(Side2)に表示します。
* Windows上のフォルダやファイルをSide1またはSide2にドロップすると、ドロップした側の対象が置き換わります。
* Windows上のフォルダやファイルを２つまとめてドロップすると、ドロップした側と反対側の対象がそれぞれ置き換わります。
* 行ごとの差異内容(Same/Different/Only1/Only2)によって、行の表示/非表示をボタンでフィルタリングできます。
* リスト表示部では、Ctrl+TABキーでダイアログ上の次の部品にフォーカスを移動できます。


### フォルダ比較画面

フォルダ比較時の画面は下図の通りです。

![フォルダ比較画面](Images/Differ_Folder_Compare.png)

* Side1とSide2の差異のある行が色付きで表示されます。ファイルの差異の判定方法は設定ファイルの項目を参照してください。
* フォルダ比較表示の際、１行を選択してダブルクリックすると、その行のフォルダまたはファイルの組で新しいタブ(子タブ)が作成されます。
* フォルダ比較表示の際、編集可能な状態で、右クリックメニューや上部ボタンで、選択した行の項目のコピーや削除が実行できます。
* フォルダ比較表示の際、編集(行のコピーや削除)の可否を上部ボタンで切り替えできます。編集可能な場合はラベル行が薄い黄色背景で表示されます。
* 行選択コピーや行選択削除を実施した場合、実施行の子供タブや孫タブがフォルダであれば再読み込みされます。
* 行選択コピーや行選択削除を実施した場合、実施行の子供タブや孫タブがファイルであれば再読み込みされません。(編集中のケースがあるため)
* Side1とSide2が、同名でファイルとフォルダの場合、行コピーを実施すると上書きされる対象行が赤背景になります。再読み込みを実施してください。

![同名のファイルとフォルダが存在](Images/Differ_FileAndFolder.png)


### テキストファイル比較画面

テキストファイル比較時の画面は下図の通りです。

![テキストファイル比較画面](Images/Differ_Text_Compare.png)

* テキストファイルの読み込み最大バイト数を設定ファイルで変更 (MaxTextLoading) できます。
* テキストファイルの読み込み最大バイト数を超える部分は読み込まれません。その場合、ラベル行が薄い紫色背景で表示されます。
* テキストファイルの読み込みが失敗した場合、ラベル行が薄い赤色背景で表示されます。
* Side1とSide2の差異のある行が色付きで表示されます。また、行内の差異部分も濃い色付き背景で表示されます。
* テキストファイル比較表示の際、Side1とSide2の比較する行の組み合わせが自動判定されますが、CONNECT操作、FLOAT操作という方法で手動変更できます。
* 比較する行の組み合わせの変更については、後述の「リスト表示(比較内容表示)での比較する行の組み合わせの手動変更について」を参照してください。
* ファイル表示の際、編集(ファイルの内容の変更)の可否を上部ボタンで切り替えできます。編集可能な場合はラベル行が薄い黄色背景で表示されます。
* ファイル表示の際、内容の編集操作を行うとフィルタ表示が解除されます。
* ファイル表示の際、右クリックメニューや上部ボタンで、選択した行のデータのコピーや削除ができます。
* ファイル表示の際、内容を編集していて未保存の状態では、ラベル行が山吹色背景で表示されます。
* ファイル表示の際、編集していて未保存のままタブを閉じると変更内容が破棄されます。この時、編集中の内容を自動でバックアップします。
* テキストファイルの編集では上書きモードはありません。挿入モードのみです。IMEのON/OFFを枠の色で把握できます。


### バイナリファイル比較画面

バイナリファイル比較時の画面は下図の通りです。

![バイナリファイル比較画面](Images/Differ_Binary_Compare.png)

* バイナリファイルの読み込み最大バイト数を設定ファイルで変更 (MaxBinaryLoading) できます。
* バイナリファイルの読み込み最大バイト数を超える部分は読み込まれません。その場合、ラベル行が薄い紫色背景で表示されます。
* バイナリファイルの読み込みが失敗した場合、ラベル行が薄い赤色背景で表示されます。
* Side1とSide2の差異のある行が色付きで表示されます。また、行内の差異部分も濃い色付き背景で表示されます。
* ファイル表示の際、編集(ファイルの内容の変更)の可否を上部ボタンで切り替えできます。編集可能な場合はラベル行が薄い黄色背景で表示されます。
* ファイル表示の際、内容の編集操作を行うとフィルタ表示が解除されます。
* ファイル表示の際、右クリックメニューや上部ボタンで、選択した行のデータのコピーや削除ができます。
* ファイル表示の際、内容を編集していて未保存の状態では、ラベル行が山吹色背景で表示されます。
* ファイル表示の際、編集していて未保存のままタブを閉じると変更内容が破棄されます。この時、編集中の内容を自動でバックアップします。
* バイナリファイルの編集では上書きモードと挿入モードを切り替えできます。その際、枠の色の変更でモードを把握できます。


### バイナリファイルの編集における表示上の隙間

バイナリファイルの編集では、実データの存在しない「表示上の隙間」を入力できます。

![バイナリファイルの編集における表示上の隙間](Images/Differ_Binary_ViewSpaces.png)

* 表示上の隙間は、SIDE1とSIDE2のデータ比較位置を調整するために使用され、ファイルへの保存時は無視されます。
* 表示上の隙間は、編集可能な状態で、スペースキーの押下等で入力できます。
* 表示上の隙間は、ファイルの再読み込みを実施するとクリアされます。
* 表示上の隙間は、クリップボードへのコピー、クリップボードからの貼り付けの際にも適用されます。
* クリップボードへのコピーの際、表示上の隙間を省きたい場合は、Ctrl＋Shift＋C を押下してください。


## タブ表示部

タブ表示部では、比較する対象のフォルダやファイルの組をそれぞれタブとして表示します。

![タブ表示部](Images/Differ_Tab_Area.png)

* タブの表記ではパス名が省略されますが、右クリックメニューでパス名を確認できます。
* タブが多くなり表示しきれない場合は隠れた状態になります。タブを選択して左右カーソルを押下するか、タブを摘まんで左右に動かすと、隠れたタブが表示できます。
* タブの位置移動もできます。操作方法は後述の「タブのキーボード操作」の欄を参照してください。
* 比較する対象の名称が異なる場合は、「/」区切りで両方の名称を表示します。どちらかが空(未指定)の場合は、未指定側が「*」表示になります。
* 各タブの中で、上の階層のフォルダのタブが読み込まれていないタブを、ルートタブと呼びます。ルートタブは、名称が影付き文字で表示されます。
* Side1とSide2が一致していると判定されたタブは、名称がグレー文字で表示されます。
* Side1かSide2の内容が編集されていて未保存の場合は、タブ名称が赤文字で表示されます。
* フォルダ比較表示の場合とファイル同士の比較の場合で、ファイルの同一判定が異なる場合があります。設定ファイルを参照してください。
* タブの表示項目の組を保存したファイルをタブ表示部にドロップすると、記述されていた全タブが復元されます。
* Windows上のフォルダやファイルをタブ表示部にドロップすると、その項目を表示する新たなタブが追加されます。
* Windows上のフォルダやファイルを２つまとめてタブ表示部にドロップすると、その組み合わせのタブが追加されます。


## 差異全体概要表示部 (リスト表示部の右側にあるの色付きの細長いバー)

* リスト表示部の表示対象のフォルダやファイルの差異全体が、縦長の細いバーに色付き表示されます。
* 差異全体概要表示部でマウスを左クリックすると、全体のうちクリックした部分の該当位置にリスト表示部がスクロールされます。


## 行の詳細差異表示部 (下部の２つの行表示エリア)

* リスト表示部(比較内容表示部)のカーソル行の内容が、Side1が上、Side2が下のボックスに表示されます。
* リスト表示部のカーソル行に差異がある場合は、行の詳細差異表示部にも色付きで差異が表示されます。
* 行の詳細差異表示部では、Ctrl+TABキーで次のダイアログ上の部品にフォーカスを移動します。


## ステータス表示部 (最下部の１行領域)

* エラー等が発生した際にエラー情報が表示されます。
* ステータス表示部の上の枠部分でマウスをドラッグすると、ステータス表示部の大きさを広げる事ができます。


## リスト表示(比較内容表示)時の比較する行の組み合わせの手動変更について

ツールが自動判定したSide1とSide2の行の比較組み合わせを手動で変更する方法には CONNECT 操作と FLOAT 操作の２つがあります。


### CONNECT操作

* Side1とSide2の特定の１行ずつを比較する位置として固定する方法を CONNECT 操作と呼びます。
* Side2の１行を選択し、Ctrlキーとマウスの左ボタンを押下したまま、別の行位置に動かして(ドラッグ)左ボタンを放すと、放した位置のSide1の行と元のSide2の行が CONNECT されます。
* 上記ドラッグ操作中は、Side1側の行が赤枠で囲まれるので、CONNECT したい行が赤枠になった時にマウスの左ボタンを放します。
* もしくは、Side2の１行を選択し、右クリックメニューの「Drag for connect lines」を実行すると、ドラッグ中と同じ状態になります。マウスを左クリックすると CONNECT されます。
* ドラッグ状態では、リスト表示枠の上端より上にマウスを動かすと、動かす動作に連動して上方にスクロールします。上端から離れるほど大きくスクロールします。
* ドラッグ状態では、リスト表示枠の下端より下にマウスを動かすと、動かす動作に連動して下方にスクロールします。下端から離れるほど大きくスクロールします。
* CONNECT した行は、Side1とSide2の中央の境界部分が、四角く薄紫色で表示されます。
* CONNECT した行を選択して、右クリックメニュー「Disconnect lines」を選択すると、CONNECT 状態を解除できます。複数行まとめて選択して解除できます。
* フォルダ比較表示の場合に CONNECT 操作を行うと、ファイル名の異なるファイル同士を比較する事ができます。


### FLOAT操作

* ファイルの一部を移動編集したような場合、比較時に、他の部分はそのままで移動した部分のみを逆Side側の違う位置と比較させる方法を FLOAT 操作と呼びます。
* Side2の複数行をまとめて選択し、Ctrlキーと左ボタンを押下したまま(ドラッグ)別の行位置に動かして左ボタンを放すと、放した位置のSide1の行からSide2の対象部分の比較を始めます。
* 上記ドラッグ操作中は、Side1側の行が赤枠で囲まれるので、FLOAT比較したい行が赤枠になった時にマウスの左ボタンを放します。
* もしくは、Side2の複数行を選択し、右クリックメニューの「Drag for float lines」を実行すると、ドラッグ中と同じ状態になります。マウスを左クリックすると FLOAT比較されます。
* FLOAT 比較がされている時は、位置を移動して比較しているSideの指定した複数行が、紫枠で囲まれて表示されます。また、比較している行の中央の境界部分が、四角く紫色で表示されます。
* FLOAT した行を選択して(一部でも)、右クリックメニュー「Disconnect lines」を選択すると、FLOAT 状態を解除できます。複数行まとめて選択して解除できます。


### フォルダ比較時の CONNECT 操作の前後の画面

![CONNECT操作前](Images/Differ_Path_Connect_Before.png)
![CONNECT操作後](Images/Differ_Path_Connect.png)


### ファイル比較時の CONNECT 操作の前後の画面

![CONNECT操作前](Images/Differ_Text_Connect_Before.png)
![CONNECT操作後](Images/Differ_Text_Connect.png)


### ファイル比較時の FLOAT 操作の前後の画面

![FLOAT操作前](Images/Differ_Text_Float_Before.png)
![FLOAT操作後](Images/Differ_Text_Float.png)


## リスト表示部の左右分割位置の変更

マウスをリスト表示部中央の左右分割位置に持ってくるとマウスカーソルが左右移動を示すカーソルに変わります。
この時にマウスを押下したまま左右に動かすことで、左右分割位置を移動できます。
左右分割位置は、ウィンドウの大きさを変更するか、Ctrl+R、右クリックメニューから、元の中央の位置に戻すことができます。


## リスト表示部の右クリックメニュー

リスト表示部でマウスを右クリックすると、下記のメニュー項目が表示されます。

	Reload tab							... 現在タブの２つの対象を再読み込みします。編集後未保存のファイルは破棄されます。(ただし、編集内容を自動バックアップします)
	Reload side (sideX)					... 該当Sideの対象を再読み込みします。編集後未保存のファイルは破棄されます。(ただし、編集内容を自動バックアップします)
	Save to file (sideX)				... ファイル比較表示の時、該当Sideの対象が編集後未保存の場合、修正内容をファイルに保存します。(元の内容を自動バックアップします)
	Open new tab						... フォルダ比較表示の時、カーソル位置の行の項目を対象として子タブを作成します。
	Open path (sideX)					... フォルダ比較表示の時、カーソル位置のフォルダorファイルをWindowsで開きます。ファイル比較表示の時はファイルを開きます。
	Open base folder (sideX)			... フォルダ比較表示の時、タブに読み込まれたフォルダをWindowsで開きます。ファイル比較表示の時は親フォルダを開きます。
	Drag for connect lines				... 選択した行を CONNECT 操作で別の位置の行と強制比較したい場合にこの項目を選択します。CONNECT 設定のドラッグ状態になります。
	Drag for float lines				... 選択した複数行を FLOAT 操作で、切り離して別の位置と比較したい場合にこの項目を選択します。FLOAT 設定のドラッグ状態になります。
	Clear connected lines				... 選択した複数行に含まれる CONNECT または FLOAT 操作の対象を解除します。
	Copy selections 1 -> 2				... 複数選択した行の項目をSide1からSide2にコピーします。(ファイルやフォルダコピーの場合は元のものを自動バックアップします)
	Copy selections 1 <- 2				... 複数選択した行の項目をSide2からSide1にコピーします。(ファイルやフォルダコピーの場合は元のものを自動バックアップします)
	Delete selections (only side1)		... side1の、複数選択した行の項目を削除します。(ファイルやフォルダ削除の場合は自動バックアップします)
	Delete selections (only side2)		... side2の、複数選択した行の項目を削除します。(ファイルやフォルダ削除の場合は自動バックアップします)
	Cursor to previous difference		... リスト表示部の中で、カーソルを前の差異位置に移動します。
	Cursor to next difference			... リスト表示部の中で、カーソルを次の差異位置に移動します。
	Reset dividing point to center		... リスト表示の左右分割位置を中央にリセットします。
	Set/Clear editable mode (sideX)		... 選択したSideのファイルに対して、編集不可状態と編集可能状態を切り替えます。
	Copy to clipboard (sideX)			... 該当Sideの選択した範囲の内容をクリップボードにコピーします。
	Load from clipboard (sideX)			... クリップボードの内容をテキストファイルとして該当Sideに読み込みます (「*」表示の初期状態タブの場合だけ有効です)。
 										... 読み込みできる最大の大きさが設定ファイルで指定できます。
	Paste from clipboard (sideX)		... クリップボードの内容を該当Sideの選択した範囲に貼り付け(置換)します。
	Undo previous modification (sideX)	... 選択したSideの直前の編集操作を取り消します。
	Redo undone operation (sideX)		... 選択したSideの取り消した編集操作を再度反映します。
	Handle this as text type			... フォルダ比較表示の時は選択中ファイルの、ファイル比較表示の時はそのファイルの、拡張子をテキスト型として扱うように設定します。
										... ファイル比較表示の時は、一旦タブを閉じて開く事で反映されます。
	Handle this as binary type			... フォルダ比較表示の時は選択中ファイルの、ファイル比較表示の時はそのファイルの、拡張子をバイナリ型として扱うように設定します。
										... ファイル比較表示の時は、一旦タブを閉じて開く事で反映されます。
	Setup type font						... 表示中のタイプのフォントを変更します。
	Execute xxxx						... (選択的に表示) 設定ファイルにUserCommandを記述した場合に、選択行のパス名(または表示ファイル)を引数として外部プログラムを実行します。

* 上記記載のメニュー名称に含まれる「sideX」部分は、実際のメニュー上では、side1 または side2 となります。


## リスト表示部のキーボード操作

リスト表示部では、下記のキー操作が可能です。

	Ctrl＋F				... 文字列を入力して、文字列の含まれる行を検索します。(フォルダ比較表示の場合はファイル名のみが対象)
	Ctrl＋S				... 文字列検索を逆方向に行います。
	Ctrl＋D				... 文字列検索を順方向に行います。
	Ctrl＋R				... 文字列置換を順方向に行います。
	Ctrl＋Wheel			... スクロール速度が２倍になります。
	Ctrl＋W				... 現在選択されているタブを削除します。
	Ctrl＋E				... 選択Sideの編集可能状態と編集不可状態を切り替えます。
	Ctrl＋T				... 入力ダイアログで指定した文字列を現在位置に挿入します。バイナリファイルにマルチバイトコードを入力する際に利用します。
	Ctrl＋C				... 該当Sideの選択した範囲の内容をクリップボードにコピーします。(注参照)
	Ctrl＋Shift＋C		... [バイナリファイル時] クリップボードにコピーする際、表示の隙間を省いてコピーします。(注参照)
	Ctrl＋V				... [ファイル時] 該当Sideの選択した範囲にクリップボードの内容を貼り付けます。(注参照)
	Ctrl＋X				... [ファイル時] 指定範囲を削除します。
	Ctrl＋Z				... [ファイル時] 選択したSideの直前の編集操作を取り消します。
	Ctrl＋Shift＋Z		... [ファイル時] 選択したSideの取り消した編集操作を再度反映します。
	Ctrl＋1				... Side1を選択します。
	Ctrl＋2				... Side2を選択します。
	Ctrl＋3				... [バイナリファイル時] 16進表示領域と文字表示領域間でカーソル位置を切り替えます。
	Ctrl＋4				... Side1/Side2の分割位置を真ん中にリセットします。
	←					... カーソル位置を左に移動します。左端の場合は上の行の右端に移動します。
	→					... カーソル位置を右に移動します。右端の場合は下の行の左端に移動します。
	Ctrl＋←			... カーソル位置を行の左端に移動します。
	Ctrl＋→			... カーソル位置を行の右端に移動します。
	Ctrl＋Shift＋,		... 選択Sideを左端まで横スクロールします。
	Ctrl＋,				... 選択Sideを左方向に横スクロールします。
	Ctrl＋.				... 選択Sideを右方向に横スクロールします。
	Ctrl＋Shift＋.		... 選択Sideを右端まで横スクロールします。

	Enter(RETURN)		... [テキストファイル時] カーソル位置で行を分割します。範囲選択していた場合は先に範囲選択部分を削除します。
	DELETE				... [ファイル時] 範囲選択していた場合は範囲選択部分を削除します。そうでなければ、カーソル位置の１文字を削除します。[テキストファイル時] 行末の場合は次の行と連結します。
	Backspace			... [ファイル時] 範囲選択していた場合は範囲選択部分を削除します。そうでなければ、カーソル位置の前の文字を削除します。[テキストファイル時] 行頭の場合は前の行と連結します。
	INSERT				... [バイナリファイル時] 編集モードをインサートモードと上書きモード間で切り替えます。(デフォルトは上書きモード)。
	DoubleClick			... [ファイル時] ワードを選択します。[フォルダ比較時] メニュー「Open new tab」と同じです。
	Ctrl+DoubleClick	... [ファイル時] アンダーラインをアルファベット同等と見做してワードを選択します。[フォルダ比較時] メニュー「Open new tab」と同じです。
	TrippleClick		... [ファイル時] 改行を含めて行全体を選択します。

* テキスト/バイナリファイルで、Shiftキーを押下したままカーソルキーを押下すると、カーソルを移動しつつ選択範囲を広げることができます。
* バイナリファイル時のクリップボードへのコピーは、16進数表記欄では16進数表記で、文字表記欄では実データ文字列でコピーされます。
* バイナリファイル時のクリップボードからの貼り付け時、貼り付ける文字コードの確認画面が表示されます。クリップボードではUTF16で保持されるため、貼り付けのために変換が必要になるからです。
* キー割り当ては変更可能です。[KeyBinding] の項目を参照してください。


## タブメニュー

タブ表示部でマウスを右クリックすると、下記のメニュー項目が表示されます。

	[1]…								... Side1に読み込まれたフォルダやファイルのフルパス名です。選択するとファイルやフォルダを開きます。
	[2]…								... Side2に読み込まれたフォルダやファイルのフルパス名です。選択するとファイルやフォルダを開きます。
	Copy path-1 name to clipboard		... Side1に読み込まれたフォルダやファイルのフルパス名をクリップボードにコピーします。
	Copy path-2 name to clipboard		... Side2に読み込まれたフォルダやファイルのフルパス名をクリップボードにコピーします。
	Reload tab							... メニューを表示したタブを現在タブに設定し、対象タブを再読み込みします。
										... Side1/Side2が編集後未保存のファイルの場合は破棄されます。(編集内容を自動バックアップします)
	Reload all tabs						... 全タブを再読み込みします。
	Delete tab							... メニューを表示したタブを削除します。
										... Side1/Side2が編集後未保存のファイルの場合は破棄されます。(編集内容を自動バックアップします)
	Open parent tab						... メニューを表示したタブの親フォルダ同士を比較するタブを表示します。
	Save each tab pairs to file			... 全タブの表示項目の組をファイルに保存します。保存したファイルは、タブ位置にドロップすると再利用できます。
	Open new dialog with current tab	... 新しいダイアログを開き、現在のタブを読み込みます。
	Copy tab data to clipboard			... 指定したタブの比較対象のパス名の組をクリップボードに保存します。
	Recieve tab from clipboard			... クリップボードに保存されたパス名の組から、新しいタブを生成します。(２つのWindow間でタブを受け渡しするための機能)
	Select specified tab				... サブメニューから選択したタブを現在タブにします。表示を切り替えるのと同じ効果です。


## タブのマウス操作

タブ表示領域では、下記のマウス操作が可能です。

	タブを摘んで動かす					... タブ領域がスクロールします。
	キーを押しながらタブを摘んで動かす	... Shift、Ctrl、Altいずれかのキー押下とドラッグにより、タブの位置を移動します。
	×マーククリック					... マークのあるタブを削除します。
	＋マーククリック					... 新規の空タブを作成します。


## ウィンドウ上部のボタン

ウィンドウ上部の左側のボタン列は、クリックすると、割り当てられた処理を実施します。

![ウィンドウ上部の左側のボタン](Images/Differ_Left_Buttons.png)

各ボタン押下時の動作は下記の通りです。

	Reload Tab		... 現在タブの２つの対象を再読み込みします。編集後未保存のファイルの場合は破棄されます。(編集内容を自動バックアップします)
	All				... 全てのタブに対しReloadボタンの処理を実行します。
	Copy -->		... リスト表示部の右クリックメニュー「Copy selections 1 -> 2」と同一動作です。
	Copy <--		... リスト表示部の右クリックメニュー「Copy selections 1 <- 2」と同一動作です。
	Delete Line:1	... リスト表示部の右クリックメニュー「Delete selections (only side1)」と同一動作です。
	Delete Line:2	... リスト表示部の右クリックメニュー「Delete selections (only side2)」と同一動作です。
	Save File		... 現在タブの２つの対象のいずれかが編集後未保存の場合、編集内容をファイルに保存します。
	Open Backup		... バックアップされた履歴をダイアログで開きます。個々に元に戻すことが可能です。
	Open Config		... 設定ファイルをWindowsで開きます。
	Save Pairs		... 全タブの表示項目の組をファイルに保存します。保存したファイルは、タブバー位置にドロップすると再利用できます。
 
 
## ウィンドウ上部のトグルボタン

ウィンドウ上部の右側のボタン列は、クリックすると、割り当てられた状態の ON/OFF が反転します。

![ウィンドウ上部の右側のボタン](Images/Differ_Right_Buttons.png)

* フィルタボタンは、枠が紫色はOn、灰色はOffを表します。
* フィルタの状態はタブごとに変更できます。また、フォルダ比較表示の時、子のフォルダ比較タブを開いた場合はフィルタが引き継がれます。

各ボタン押下時の動作は下記の通りです。

	Edit Side1		... ONの場合、Side1のファイルの内容変更操作を許可します。
	Edit Side2		... ONの場合、Side2のファイルの内容変更操作を許可します。
	Simple			... ONの場合、リスト表示を簡略化します。
	Same			... OFFの場合、リスト表示部の差異がない項目を非表示にします。(差異がある項目だけ表示)
	Different		... OFFの場合、リスト表示部の両Sideが異なる項目を非表示にします。
	Only1			... OFFの場合、リスト表示部の左側Sideだけの項目を非表示にします。
	Only2			... OFFの場合、リスト表示部の右側Sideだけの項目を非表示にします。


## 自動バックアップ機能

* バックアップフォルダ中に、時刻と操作名を名称とするサブフォルダを作成します。
* バックアップフォルダは設定ファイルで指定できます。デフォルトは一時フォルダが使用されます。
* フォルダ比較表示の時、フォルダやファイルのコピーや削除時に、元のファイルをバックアップします。
* ファイル比較表示の時、編集後の保存時に、元のファイルをバックアップします。
* ファイル比較表示の時、編集後に未保存で破棄した場合は、編集した内容をバックアップします。


### バックアップ履歴ダイアログ

バックアップ履歴ダイアログは、過去に実施したファイル削除/コピーや保存操作を元に戻すためのダイアログです。

![バックアップ履歴ダイアログ](Images/Differ_Backup_Dialog.png)

* リスト表示領域に過去の操作履歴が新しい順に表示されるので、１項目を選択して、DetailやRestore等のボタンを指示します。
* 薄黄色背景の項目はプログラム起動後に実施したバックアップ履歴で、白色背景は以前の起動時のバックアップ履歴です。
* リストア実施後、主ダイアログのリスト表示領域が更新されないため、手動で再読み込みを実行してください。

各ボタン押下時の動作は下記の通りです。

	Restore !		... 選択した項目のバックアップデータを元の場所のファイル/フォルダに一括してリストアします。
	Force			... ON/OFFボタンです。ONの時にRestoreを実施すると、リストア不可の項目も強制的にリストアします。
	Backupped data	... 選択した項目のバックアップデータが格納されているフォルダを開きます。
	Source folder	... 選択した項目に含まれる最初の詳細項目のバックアップした元のファイル/フォルダの親フォルダを開きます。
	Detail			... 選択した項目の個々の処理の項目リストを表示します。


### バックアップ履歴ダイアログの詳細項目リスト表示

バックアップ履歴ダイアログの詳細項目リスト表示は、バックアップした個々のデータごとに元に戻すために使います。

![ダイアログ](Images/Differ_Backup_Detail.png)

* リスト表示領域にバックアップしたファイル/フォルダの項目リストが表示されるので、Restore等のボタンを指示します。
* 薄緑色背景はリストア可能な状態を示します。(バックアップデータと元の場所のファイル/フォルダが異なる)　Restoreボタンでリストアできます。
* 白色背景はリストア不要な状態を示します。(バックアップデータと元の場所のファイル/フォルダが同じ)　Forceチェック時は強制リストアします。
* 薄赤色背景はリストア不可な状態を示します。(バックアップ以降に元の場所のファイル/フォルダが更新された)　Forceチェック時は強制リストアできます。
* 灰色背景はバックアップデータが保存されていない事を示します。(バックアップ時にツールで保存しない設定をしていた場合など)
* 主ダイアログで保存せずに閉じたファイルも薄赤色背景になります。通常はバックアップデータを参照してください。Forceチェック時はリストアで強制上書きします。
* リストア実施後、主ダイアログのリスト表示領域が更新されないため、手動で再読み込みを実行してください。

各ボタン押下時の動作は下記の通りです。

	Restore !		... 選択した項目のバックアップデータを元の場所のファイル/フォルダに一括してリストアします。
	Force			... ON/OFFボタンです。ONの時にRestoreを実施すると、リストア不可の項目も強制的にリストアします。
	Backupped data	... 選択した項目のバックアップデータが格納されているフォルダを開きます。
	Source folder	... バックアップした元のファイル/フォルダが存在していた親フォルダを開きます。


# 設定ファイル

本プログラムと同じフォルダにある、<プログラム名>.ini という名称のファイルを設定ファイルとして読み込みます。


## 共通項目

	[Common]
	Program=Differ			... Differの設定ファイルである事を指定します。
	GuiProfile=xxxx			... 表示に関するパラメータやウィンドウの位置情報などを保存するファイルを別のファイルに分離する場合に指定します。
	ConfigFile=xxxx			... 動作設定情報を記述するファイルを別のファイルから読み込む場合に指定します。
	LanguageFile=xxxx		... GUIの表示言語設定ファイルを指定します。未指定の場合は LanguageFile.ini が使用されます。
	Language=xxxx			... LanguageFile内の使用するセクション名を指定します。ユーザー選択設定がある場合はそちらを優先します。

* Common項目のパス指定で相対パスを指定した場合は、プログラムの置かれたフォルダからの相対に置き換えられます。
* Common項目のパス指定内で「$(User)」を用いた場合は、ユーザの AppData\Roaming\プログラム名 に置き換えられます。


## 動作設定

プログラムの動作に関する設定を指定します。


### 各種パラメータの設定

動作に関わる各種のパラメータを指定します。

	[Option]
	BackupFolder=xxxxx				... バックアップデータを格納するフォルダを指定します。(デフォルトはユーザーのTEMPフォルダ内に作成)
	BackupDays=10					... 過去のバックアップを保持しておく日数を指定します。(デフォルトは 10 日)
	BackupDisabled=False			... バックアップを保管しない場合は True を指定します。バックアップをしない場合はゴミ箱に移動します。(デフォルトは False)
	VirtualKeyFile=xxxx				... 仮想キー名に対応する仮想キーコード値を定義するファイルを指定します。(デフォルトは VirtualKey.ini)
	KeyBindingFile=xxxx				... キーに対して割り当てる処理を記述したファイルを指定します。(デフォルトは KeyBinding.ini)
	PairFileExtension=.txt			... ペア保存時のデフォルト拡張子をピリオド付きで指定します。Windowsの関連付けはしません。(デフォルトは .cfg)
	TimeForm=%Y/%m/%d %H:%M:%S		... フォルダ比較表示の際の時間形式を指定します。(デフォルトは %Y/%m/%d %H:%M:%S )
									... %Y=年(4桁) %y=年(2桁) %m=月(2桁) %d=日(2桁) %e=曜日(英3字) %j=曜日(漢字1字)
									... %H=時間(2桁) %M=分(2桁) %S=秒(2桁)桁 %I=ミリ秒(3桁)
	ForeReadingLines=50				... テキストファイル比較表示時の、合致行検索の先読み行数を指定します。この数値は処理負荷に大きく影響します。(デフォルトは 50 行)
	ForeReadingLinesEscaped=20		... テキストファイル比較表示時、ESCAPEキー押下の場合の先読み行数を指定します。この数値は処理負荷に大きく影響します。(デフォルトは 20 行)
	MatchingRate=70					... テキストファイル比較表示時、違いがある行を合致と判定する文字一致割合を指定します。(デフォルトは 70 ％)
	MinMatchingChars=2				... 行の詳細比較時、一致と判定する最小文字数を指定します。
	TabStop=4						... タブの幅を設定します。(デフォルトは 4)
	LRMarginOnPath=2				... フォルダ比較表示時の各カラムの左右マージン幅を設定します。(デフォルトは 2 ピクセル)
	LRMarginOnText=2				... テキストファイル比較表示時の各カラムの左右マージン幅を設定します。(デフォルトは 2 ピクセル)
	LRMarginOnBinary=4				... バイナリファイル比較表示時の各カラムの左右マージン幅を設定します。(デフォルトは 4 ピクセル)
	TextNewLineCode=xxxx			... テキスト表示の際に改行文字を表示する場合は文字コード (UTF8のバイト列を連結) を指定します。(デフォルトは 0xEFBFA9)
	MaxClipLoading=0x7FFF			... 「Load from clipboard」メニューで読み込みできる最大のサイズを指定します。10進数でも可。(デフォルトは 0x7FFF バイト)
	MaxTextLoading=0x100000			... テキストファイルの内容を読み込む最大バイトサイズ。これ以上は読み込まず表示を切り捨てます。10進指定等も可。(デフォルトは 0x100000 バイト)
	MaxBinaryLoading=0x100000		... バイナリファイルの内容を読み込む最大バイトサイズ。これ以上は読み込まず表示を切り捨てます。10進指定等も可。(デフォルトは 0x100000 バイト)
	CompareTimeBySecond=True		... ファイル時刻の比較時に秒単位で比較します。ZIP圧縮すると秒単位になる事への対応です。(デフォルトはTrue)
	CompareTimeAsFatTime=True		... ファイル時刻の比較時に1秒差を同一判定します。FATで時刻が2秒単位で記録される事への対応です。(デフォルトはTrue)
	CompareSizeOnText=True			... フォルダ比較表示でのテキストファイルの一致判定で、ファイルサイズの比較を行います。(デフォルトはTrue)
	CompareTimeOnText=True			... フォルダ比較表示でのテキストファイルの一致判定で、ファイル時刻の比較を行います。(デフォルトはTrue)
	CompareByteOnText=False			... フォルダ比較表示でのテキストファイルの一致判定で、先頭４バイトの比較を行います。(デフォルトはFalse)
	CompareDataOnText=False			... フォルダ比較表示でのテキストファイルの一致判定で、全データの比較を行います。動作が遅くなります。(デフォルトはFalse)
	CompareSizeOnOther=True			... フォルダ比較表示でのバイナリファイルの一致判定で、ファイルサイズの比較を行います。(デフォルトはTrue)
	CompareTimeOnOther=True			... フォルダ比較表示でのバイナリファイルの一致判定で、ファイル時刻の比較を行います。(デフォルトはTrue)
	CompareByteOnOther=False		... フォルダ比較表示でのバイナリファイルの一致判定で、先頭４バイトの比較を行います。(デフォルトはFalse)
	CompareDataOnOther=False		... フォルダ比較表示でのバイナリファイルの一致判定で、全データの比較を行います。動作が遅くなります。(デフォルトはFalse)
	PathOption=xxxx,yyyy～			... フォルダ比較表示の、トグルボタンの初期状態を指定します。(デフォルトはSame,Different,Only1,Only2)
	TextOption=xxxx,yyyy～			... テキストファイル比較表示の、トグルボタンの初期状態を指定します。(デフォルトはSame,Different,Only1,Only2)
	BinaryOption=xxxx,yyyy～		... バイナリファイル比較表示の、トグルボタンの初期状態を指定します。(デフォルトはSame,Different,Only1,Only2)
	TakeOverPathOption=xxxx,yyyy～	... フォルダの組を開く際に、親フォルダの組から引き継ぐトグルボタン状態を指定します。(デフォルトはEdit1,Edit2,Same,Different,Only1,Only2)

* トグルボタンの初期状態の指定では、Edit1,Edit2,Simple,Same,Different,Only1,Only2 のいずれかをカンマ区切りで複数記述できます。
* 設定ファイルにおける数値表記は、10進数/16進数/8進数/2進数での表記が可能です。数値の先頭に、16進数は 0x、8進数は 0o、2進数は 0b を付加して、0x5BC2 のように指定します。
* テキストファイル比較表示時、比較に時間が掛かる場合に、ESCAPEキーを押下して先読み行数を減らすことで、時間短縮を図れます。先読み行数は1ファイルの比較ごとに元に戻ります。
* VirtualKeyFile,KeyBindingFileを相対パスで指定した場合は、設定ファイルの置かれたフォルダからの相対パスとして処理されます。


### 背景色設定

リスト領域に表示する行や内容の背景色を変更します。

	[ColorSetting]
	LineColorSeparation=True		... Side1とSide2の行全体の差異を表わす背景色を行ごとに分離するかどうかを指定します。(デフォルトは True)
	LineDetailSeparation=True		... Side1とSide2の行内の詳細差異を表わす背景色の行間を分離するかどうかを指定します。(デフォルトは True)
	LineColorOverwrap=50			... 行の背景色に個別の背景色を重ね合わせる割合を 0～255 で指定します。(デフォルトは 50)
	TitleColorOverwrap=50			... ラベル行の背景色に失敗時等の背景色を重ね合わせる割合を 0～255 で指定します。(デフォルトは 50)
	TabSameColor=0x808080			... タブの両項目に差異がない場合のタブの文字色を指定します。差異がある場合は基本色で表示します。(デフォルトは左記の値)
	TabModifiedColor=0xFF0000		... タブのどちらかの項目が編集されていて未保存の状態の場合のタブの文字色を指定します。(デフォルトは左記の値)
	LineDiff1Color=0xD0FFD0			... Side1とSide2の行に差異がある場合のSide1の背景色を指定します。(デフォルトは左記の値)
	LineDiff2Color=0xFFDFB0			... Side1とSide2の行に差異がある場合のSide2の背景色を指定します。(デフォルトは左記の値)
	LineOnly1Color=0x80FF80			... Side1側にだけ行のデータがある場合のSide1の背景色を指定します。(デフォルトは左記の値)
	LineOnly2Color=0xFFC060			... Side2側にだけ行のデータがある場合のSide2の背景色を指定します。(デフォルトは左記の値)
	LineBlankColor=0xE0E0E0			... Side1もしくはSide2側にだけ行のデータがある場合の逆側の背景色を指定します。(デフォルトは左記の値)
	DetailDiff1Color=0x80FF80		... Side1とSide2の個々のデータに差異がある場合のSide1の個々の背景色を指定します。(デフォルトは左記の値)
	DetailDiff2Color=0xFFA500		... Side1とSide2の個々のデータに差異がある場合のSide2の個々の背景色を指定します。(デフォルトは左記の値)
	DetailOnly1Color=0x80FF80		... Side1側にだけ個々のデータがある場合のSide1の個々の背景色を指定します。(デフォルトは左記の値)
	DetailOnly2Color=0xFFC060		... Side2側にだけ個々のデータがある場合のSide2の個々の背景色を指定します。(デフォルトは左記の値)
	ConnectorColor=0xFF40FF			... CONNECT 状態の箇所を示す表示色を指定します。(デフォルトは左記の値)
	FloatedColor=0xFF69B4			... FLOAT 状態の箇所を示す表示色を指定します。(デフォルトは左記の値)
	FrameFocusColor=0x8080FF		... フォーカスがあるSideの枠の強調色を指定します。(デフォルトは左記の値)
	FrameImeColor=0xFF80FF			... テキストファイルでIMEがONになっている時の、フォーカスがあるSideの枠の強調色を指定します。(デフォルトは左記の値)
	FrameInsertModeColor=0xFFC580	... バイナリファイルで挿入モードがONになっている時の、フォーカスがあるSideの枠の強調色を指定します。(デフォルトは左記の値)
	DetailBlankColor=NoColor		... Side1もしくはSide2側にだけ個々のデータがある場合の逆側の背景色を指定します。(デフォルトは左記の値)
	NullPathColor=0xE0E0E0			... ファイル/フォルダが未指定のSideのラベル行の背景色を指定します。(デフォルトは左記の値)
	ModifiedColor=0xF0E020			... ファイルの内容を編集中のSideのラベル行の背景色を指定します。(デフォルトは左記の値)
	EditableColor=0xFFFF80			... ファイルを編集可能に設定したSideのラベル行の背景色を指定します。(デフォルトは左記の値)
	ReadFailColor=0xFFC0C0			... ファイル読み込みに失敗したSideのラベル行の背景色を指定します。(デフォルトは左記の値)
	OverSizeColor=0xFFC0C0			... ファイルサイズが大きぎて途中までしか読み込めなかったSideのラベル行の背景色を指定します。(デフォルトは左記の値)
	PosBarSameColor=0xE0E0E0		... ダイアログの右側にある差異位置表示バーの、同一部分の表示色を指定します。 (デフォルトは左記の値)
	PosBarSide1Color=0x00F000		... ダイアログの右側にある差異位置表示バーの、差異部分のSide1の表示色を指定します。 (デフォルトは左記の値) 
	PosBarSide2Color=0xFFA500		... ダイアログの右側にある差異位置表示バーの、差異部分のSide2の表示色を指定します。 (デフォルトは左記の値) 
	PosBarBlankColor=0x808080		... ダイアログの右側にある差異位置表示バーの、データがない部分を示す表示色を指定します。 (デフォルトは左記の値) 
	TextNewLineColor=0xA0A0A0		... テキスト表示時の改行文字の表示色を指定します。(デフォルトは左記の値) 
	CharSetBackColor=0xC0C0FF		... ラベル行の右端に表示する文字コード部分の背景色を指定します。(デフォルトは左記の値) 
	CursorPivotColor=0xFF80FF		... ファイル表示時のカーソルによる選択範囲の背景色を指定します。 (デフォルトは左記の値)
	CursorPivotOverwrap=50			... カーソルによる選択範囲の背景色を重ね合わせる割合を 0～255 で指定します。 (デフォルトは左記の値)
	ImeClause1Color=0x00FFFF00		... IMEが変換中の奇数文節の背景色を指定します。この背景色は重ね合わせをしません。(デフォルトは左記の値)
	ImeClause2Color=0x00FFD0FF		... IMEが変換中の偶数文節の背景色を指定します。この背景色は重ね合わせをしません。(デフォルトは左記の値)
	ImeClauseOverwrap=255			... IMEが変換中の文節の背景色を重ね合わせる割合を 0～255 で指定します。 (デフォルトは左記の値)

* タブやリスト領域の文字の基本色はWindows設定に従います。
* 色は R G B をそれぞれ１バイト(0～255)ずつ、頭に0xを付加した16進数表記で記述します。R=255,G=192,B=96 の場合は 0xFFC060 と記載します。
* 色を付加しない(ベース色のままにする)の場合は、NoColor を指定します。 


### 拡張子によるファイルタイプの設定

本プログラムは、読み込む際に拡張子によって表示の仕方を変更します。

	[Extension]
	cpp=Text					... 左辺に拡張子、右辺に「Text」か「Binary」を指定します。
	bin=Binary
	   :

 * リスト表示部のメニューからも個々に設定ができます。
 * 本プログラムでは、テキストファイル以外をバイナリファイルとして扱います。


### フォルダやファイルを開くコマンドの設定

ファイルやフォルダをOpenする際、Windows設定以外のコマンドを使いたい場合に指定します。

	[OpenCommand]				... 複数の「OpenCommand」セクションを記述できます。
	Command=C:\xxx\xxxxx.exe	... 実行するコマンドのフルパス名を指定します。
	Parameter="%s"				... ファイル選択時にコマンドに渡す引数を指定します。「%s」がファイル名に置き換わります。
	ParameterNum="%s" -n %n		... テキストかバイナリファイル表示で行を選択している際に、コマンドに渡す引数を指定します。「%s」がファイル名、「%n」がカーソル行数に置き換わります。
	Directory=					... 実行する際の作業フォルダをWindowsに渡します。
	ShowStatus=Normal			... 実行時の初期状態をWindowsに渡します。「Normal」「Maximize」「Minimize」「Hide」が指定できます。
	Extension=txt,ini			... この設定を使う拡張子を指定します。複数の拡張子をカンマ区切りで指定できます。フォルダの場合はFolderと記述します。
								... [Extension]項目で設定した拡張子をすべて対象とする場合は、TextかBinaryと記述します。

	
### メニューやボタンから呼び出すコマンドの設定

メニューの追加項目やユーザーボタンから呼び出すコマンドを指定します。

	[UserCommand]				... 複数の「UserCommand」セクションを記述できます。
	Name=xxxx					... リスト表示部のメニュー項目名に使用されます。未指定の場合はメニューに表示されません。
	Command=C:\xxx\xxxxx.exe	... 実行するコマンドのフルパス名を指定します。
	Parameter="%s1"				... コマンドに渡す引数を指定します。「%s1」「%s2」がファイル名に置き換わります。
								... 下記のTargetSideが「Each」の場合は 「%s1」のみが使用されます。
	Directory=					... 指定した場合、実行する際の作業フォルダをWindowsに渡します。
	ShowStatus=Normal			... 指定した場合、実行時の初期状態をWindowsに渡します。「Normal」「Maximize」「Minimize」「Hide」が指定できます。
	TargetSide=Each				... 両sideのパスをコマンドに渡す場合は「Both」片方のパスを渡す場合は「Each」を指定します。
	TargetLine=Single			... フォルダ比較表示で1行のみ実行の場合は「Single」複数行を連続実行する場合は「Multiple」を指定します。
	TargetKind=Text				... 実行対象がフォルダの場合は「Folder」テキストの場合は「Text」その他は「Binary」を指定します。
								... 実行対象がファイルの場合(Text+Binary)は「File」、全タイプを対象とする場合は「*」を指定します。


### ヘルプ (マニュアル)表示の指定

タイトルメニューの「View help.」または「Version: バージョン番号」項目を選択した際のマニュアル表示方法を指定します。

	[Manual]
	Manual=xxxx,yyyy		... マニュアルファイルを指定します。カンマ区切りで複数のファイルを指定可能です。ファイル名部分には * と ? が使用できます。
	MDHelp=txt,md			... MDHelpを使って表示する拡張子を指定します。デフォルトは txt と md です。その他の拡張子は Windows 設定に従います。

* 「Version: バージョン番号」項目を選択した場合は、ReadMe_<本プログラム名>.txt を表示します。
* 「Version: バージョン番号」項目を選択した場合で、[Common]のLanguage項目を設定している場合は、ReadMe_<本プログラム名>_<言語名>.txt を先に検索します。
* 「View help.」項目では、複数のマニュアルが合致する場合に、サブメニュー形式でリストアップします。
* マニュアルファイルの指定では、プログラムフォルダからの相対指定も可能です。
* MDHelp.exeは、本プログラムのフォルダ、または MDHelpサブフォルダの下、または本プログラムフォルダと同じ並びのMDHelpフォルダの下、から検索します。


## キー割り当てファイル (KeyBindingFile)

KeyBindingFileでは、リスト表示部でのキー操作に対して割り当てる処理を設定します。下記のセクションで定義します。

	[KeyBinding]
	RETURN=InsertNewLine			... リターンキーに対して、改行の挿入機能を割り当てる例です。
	N-RETURN=InsertNewLine			... リターンキーに対して、改行の挿入機能を割り当てる例です。「N-」はシフト操作なしを意味します。 
	N-0x0D=InsertNewLine			... 仮想キーコード 0x0F (リターンキー) に対して、改行の挿入機能を割り当てる例です。
	C-Z=Undo						... Ctrl + Z キーに対して、Undo 機能を割り当てます。
	CS-Z=Redo						... Ctrl + Shift + Z キーに対して、Redo 機能を割り当てます。
	C-E=SetEditable(Side1);SetEditable(Side2)	... Ctrl + E キーに対して、両サイドの編集フラグON/OFFを割り当てます。

* 左辺にキー操作を、右辺に割り当てる機能を記述します。機能はセミコロン区切りで複数記述できます。
* 左辺の「-」の前にはシフト操作を記述します。N がシフト操作なし、C が Ctrl、S が Shift、CS が Ctrl+Shift を表します。
* 左辺の「-」の後ろにはキー名か仮想キーコード値を記述します。仮想キーコード値は 16進数表記 (0x0D 等) が可能です。キー名は VirtualKey.ini ファイルを参照してください。
* キー操作がツールに通知されるかどうかは Windows に依存します。通知されない場合は設定していても動作しません。
* 機能名の後ろには括弧付きで引数を記述できます。引数は、カンマ区切りで複数記述できます。
* Side引数では、Side1は左サイド, Side2は右サイド, SideR は現在選択中でない逆サイドを示します。左記いずれも指定しない場合は、現在の選択サイドを示します。
* Pivot引数では、Pivotはカーソル移動の際に選択範囲を広げることを示します。Pivotを指定しなければカーソル移動の際に範囲を広げないことを示します。
* 文字列引数では、Inputは新たに文字列を入力することを、二重引用符で括った文字列("xxx")はその文字列を示します。左記いずれも指定しない場合は、前回入力値を使用します。
* 数値引数では、Inputは新たに数値を入力することを、数値指定はその数値を示します。左記いずれも指定しない場合は、前回入力値を使用します。
* 機能に対してどの引数の種類が有効かは、ReadMe_Functions.txt を参照してください。


## 仮想キー名に対応する仮想キーコード値の指定ファイル (VirtualKeyFile)

VirtualKeyFileでは、各仮想キーコード値に対して名前を定義します。下記のセクションで定義します。

	[VirtualKey]
	RETURN=0x0D

* 左辺に仮想キー名、右辺に仮想キーコード値を記述します。Windows の仮想キーコードです。
* 右辺に仮想キーコード値は、10進数表記か、16進数表記 (0x30 等) で記述可能です。
* 本プログラムに付属の VirtualKey.ini は、日本語109キーボードのための定義ファイルです。
* VirtualKeyFile にはWindows定義をそのまま記述していますが、実際には定義できないコードがあります。(LBUTTONやCONTROLなど)


## Gui関連設定

ダイアログ表示に関するパラメータを指定します。
プログラムによって書き換えられるため設定ファイルと分離した方が良いです。


### ユーザー選択設定

ユーザーが選択した内容を保存します。

	[UserSelection]
	Language=xxxx				... タイトルメニューの Select language 項目で選択した設定を保存します。xxxx が空の場合は自動選択となります。

* LanguageFile が存在しない場合は、タイトルメニューの Select language 項目は選択不可となります。


### ダイアログ表示パラメータの設定

ダイアログ表示に関するパラメータを指定します。

	[WindowParameter]
	Margin=4				... ダイアログのアイテム間やボーダーの幅を指定します。(デフォルトは 4)
	ButtonR=4				... ボタンの曲率半径を指定します。(デフォルトは 4)


### フォントの指定

ダイアログの表示に使用するフォントを指定します。
タイトルメニューの 「Select window font.」で変更できます。(再実行で反映)

	[WindowFont]
	Height=12
	Width=0
	Escapement=0
	Orientation=0
	Weight=0
	Italic=0
	Underline=0
	StrikeOut=0
	Charset=1
	OutPrecision=0
	ClipPrecision=0
	Quality=0
	PitchFamily=0
	FaceName=xxxxx


### リスト表示部のフォントの設定

リスト表示部のフォントを指定します。
タイトルメニューの 「Select path view font.」 「Select text view font.」 「Select binary view font.」で変更できます。

	[PathViewFont]				... フォルダ比較表示時のフォントを指定します。
	Height=13
	   :

	[TextViewFont]				... テキストファイル比較表示時のフォントを指定します。
	Height=13
	   :

	[BinaryViewFont]			... バイナリファイル比較表示時のフォントを指定します。
	Height=13
	   :

* フォントのパラメータは WindowFont と同じです。
* バイナリファイル比較表示時のフォントは固定幅フォントを指定してください。


### ダイアログの表示位置の記録

ダイアログの表示位置を保存します。

	[MainDialog]
	WindowRect_L=133		... ダイアログの左端座標です。
	WindowRect_T=373		... ダイアログの上端座標です。
	WindowRect_R=1217		... ダイアログの右端座標です。
	WindowRect_B=976		... ダイアログの下端座標です。


# 備考

本プログラムのその他の事項について説明します。


## 差異検出の補足

* フォルダ間の差異検出では、設定ファイルの[JobParameter]項目に従い、同名ファイル同士を比較します。
* ファイルの差異検出では、各行の内容を比較して同一性を判定します。
* フォルダ比較表示内のファイル同士の比較結果が、ファイル比較表示の場合と判定が異なる場合があります。
* 比較条件は設定ファイルで指定できるので、例えば、内容は一致するがファイル時刻が異なる場合など、設定次第で判定が変化する可能性があります。


## 検索式の記述方法

検索時の入力画面は下記の通りです。

![検索式入力ダイアログ](Images/Differ_Search_Text.png)

* 検索式には、字面指定、ワイルドカード指定、詳細指定の３つの方法があります。
* 字面指定以外で、特殊記号や空白文字などを含む検索をしたい場合は、後述のエスケープ表記(「%d」や「%s」)を使用できます。
* エスケープ文字の説明で改行文字を含む記述がありますが、本プログラムでは改行を含む検索や置換はできません。


### 先頭文字による検索式の種別

* 検索式の先頭に「!」を付加した場合は、「!」以降の検索式を含まない場合に合致したと判定する検索を行います。(否定形式は通常指定しません)
* 検索式の先頭に「&」を付加した場合は、「&」以降の検索式処理で、英字の大文字と小文字を同一視します。
* 検索式の先頭に「$」を付加した場合は、字面指定での検索を行います。(「&」以降の文字列をそのままの文字として検索)
* 検索式の先頭に「@」を付加した場合は、詳細指定での検索を行います。
* 検索式の「!」「&」を除く先頭が「$」「@」でない場合は、ワイルドカード指定での検索を行います。
* 「!」「&」と「$」「@」では、先に「!」か「&」を指定してください。(例：「&$font.」「!&@Font.+」等)


### 字面指定

* 字面指定では、先頭の「$」以降の文字列をそのままの文字の列として検索します。
* 「*」「?」「%」などの記号をそのままの文字として扱います。エスケープ表記(後述)も含める事ができません。


### ワイルドカード指定

* ワイルドカード指定では、「*」「?」「%」を特殊記号として扱います。
* 「*」は０個以上の任意文字、「?」は１個の任意文字と合致します。漢字や記号も１文字になります。
* 「%」はエスケープ表記(後述)として扱われます。特殊記号等を含む検索をしたい場合にエスケープ表記を使用します。


### 詳細指定

* 詳細指定では、先頭の「@」以降の文字列を下記の条件で判定して検索します。
* 詳細指定で特殊記号をそのままの文字で検索をしたい場合は、エスケープ表記(後述)を使用します。
* 「*」は直前の文字０個以上、「+」は直前の文字１個以上、と合致します。
* 「.」は１個の任意文字と合致しますが改行は含みません。「.*」とすると、0個以上の任意文字と合致します。
* 「[」と「]」で挟まれた部分(ブロック)は挟まれた文字の中の１文字、と合致します。
* ブロック内で「-」が指定されると、その前後の文字間のすべての文字と合致します。
* 例えば、「[A-Z]」は大文字のアルファベットの内１文字、「[A-Za-z]」はアルファベットの内１文字と合致します。
* 範囲指定は全角文字でも使用できますが、文字コードベースで挟まれる範囲となります。
* ブロック内では、「a=A」ボタンでの指定に寄らず、大文字と小文字を区別します。
* ブロック内では、エスケープ表記も使用できます。しかし、改行(%n %r %N)は含めてはいけません。
* 例えば、「[A-Z%]]」は大文字のアルファベットの内１文字か「]」と合致します。
* ブロックの先頭文字が「^」の場合は、ブロック内で指定される文字以外の１文字と合致します。改行は合致しません。
* 例えば、「[^A-Z]」は大文字のアルファベットではない１文字(改行を除く)と合致します。


### エスケープ表記

エスケープ表記には下記のもがあります。

	%s		... 半角スペース
	%t		... タブ文字
	%r		... CarriageReturn (0x0D)
	%n		... LineFeed (0x0A)
	%N		... 改行 (0x0D, 0x0A, 0x0D+0x0Aのいずれか)
	%e		... パーセント文字
	%d		... デリミタ (セミコロン)
	%q		... 二重引用符
	%@		... アットマーク
	%*		... アスタリスク
	%?		... クエスチョンマーク
	%.		... ピリオド
	%+		... プラス
	%[		... 左角括弧
	%]		... 右角括弧
	%^		... カレット
	%-		... マイナス
	%0～%9	...	置換時に、検索式中の * や ? と合致した文字列をそのまま使いたい場合に使用します (後述)。


## 置換式の記述方法

置換時の入力画面は下記の通りです。

![置換式入力ダイアログ](Images/Differ_Replace_Text.png)

* 置換式中では上述のエスケープ表記が使用可能です。
* 置換式中で %0～%9 を指定した場合は、検索式中の不確定要素に合致した部分に置き換わります。先頭から順に 0～9 番目までを使用できます。
* 置換式の先頭に「$」を付加した場合は、「$」を除いた字面での置換を行います。この場合はエスケープ表記を使用できません。
* ワイルドカード指定の場合の不確定要素は「*」と「?」です。
* 例えば「A*DE*G」で検索し「ABCDEFG」が合致し「%1_%0」に置換する場合、「F_BC」に置換します。
* 詳細指定の場合の不確定要素は、<文字やブロック>*、<文字やブロック>+、<ブロック>、「.」です。
* 例えば「@A.*DE[A-Z]G」で検索し「ABCDEFG」が合致し「%1_%0」に置換する場合、「F_BC」に置換します。


## バイナリファイル編集時の文字コード指定

バイナリファイル編集時に、クリップボードや文字列置換により文字列を貼り付ける際、貼り付ける文字列にマルチバイトが含まれていた場合、
貼り付ける文字列の文字コード指定が適用されます。
文字コード指定は、バイナリファイル比較表示の際に、リスト表示部のラベル行の右端に表示されています。
デフォルトは UTF8 ですが、マウスの左クリックによりメニューが表示されるので、変更が可能です。

![バイナリファイル編集時の文字コード指定](Images/Differ_Binary_Edit_CharSet.png)


# End
