共通の機能
==========

.. module:: common.dialog
	:synopsis: 全ダイアログ共通の機能

これらの機能は多くの TortoiseHg ダイアログに共通しているため、
ここにまとめておきます。


キーボードショートカット
------------------------

すべての TortoiseHg ダイアログで使用可能なキーボードショートカットが
いくつか定義されています。

:kbd:`Ctrl-Q`
	開いているウィンドウすべてを閉じてアプリケーションを終了します

:kbd:`Ctrl-W`
	現在のウィンドウを閉じます (開いているウィンドウが1つだけの場合は
	:kbd:`Ctrl-Q` と同じ動作)

:kbd:`Ctrl-D`
	現在選択されているファイルまたはチェンジセットの差分を表示します

:kbd:`Ctrl-Enter`
	コマンドを実行します

:kbd:`Ctrl-.` and :kbd:`Ctrl-,`
	ファイル一覧で次および前のファイルを選択します

:kbd:`Ctrl-[` and :kbd:`Ctrl-]`
	テキスト表示でページ単位で前後にスクロールします

:kbd:`F5`, :kbd:`Ctrl-R`
	最新の状態に更新します

`Mac OS X <https://bitbucket.org/tortoisehg/thg/wiki/developers/MacOSX>`_ では
アップル (Command) キーを :kbd:`Ctrl` キーモディファイアの代わりに使用します。
ただしコピー＆ペーストなど一部の機能については GTK+ 標準のキーボードショートカットが
使用されるため、 :kbd:`Ctrl` キーを使わなければならない場合もあります。


差分表示
--------

.. figure:: figures/visual-diff.png
	:alt: 差分表示ウィンドウ

	差分表示ウィンドウ

TortoiseHg 1.0 では GUI 差分表示 (外部ツール) のベースが見直されました。
新しいシステムはよく使われている差分ツール (インストーラ同梱の KDiff3 も含む)
の検出とその選択に :file:`mergetools.rc` を使用します。

ユーザがマージツール (:menuselection:`TortoiseHg --> 3-way マージツール`)
を設定すると、ツール選択の処理を飛ばして、マージツールが GUI 差分表示にも使用されます。
もちろん :menuselection:`TortoiseHg --> GUI 差分表示ツール` を設定することで、
これまで通りマージツールと差分表示ツールを別々に設定することもできます。

マージツール設定ファイルには各ツールごとに最適なコマンドライン設定を持っているため、
面倒な追加設定などは不要です。使用したいツールを選択するだけで大丈夫です。

既存の extdiff 設定が見つかった場合は GUI 差分システムはそれを使います。
しかし extdiff は 3-way 差分のラベル引数をサポートしていないため、
より便利に使うために extdiff の設定を削除または無効にすることをお勧めします。

あえて TortoiseHg の GUI 差分ウィンドウを使おうとしない限り、GUI
差分システムは選択されている差分ツールを直接起動します。
以下が想定している状況です:

1) 比較されるファイルが複数のツールを必要とする
2) 選択されたツールが別のバックグラウンドプロセスを起動する
3) 選択されたツールがディレクトリ差分をサポートしていない
4) 選択されたツールが 3-way 比較をサポートしていない
5) ファイルの変更が名前変更またはコピーを含む

GUI 差分ウィンドウが使用された場合、ウィンドウが閉じられたときに一時ファイルが削除されます。
従って差分表示ツールを終了するまで閉じずに残しておく必要があります。
直接差分表示ツールが起動された場合、そのツールが終了したときに一時ファイルが削除されます。

作業コピーのファイルの比較に差分表示ツールが起動された場合、
ツールはその作業コピーのファイルを元に差分を取るため、
そのファイルをツール上で変更することができます。
複数のファイルを比較する場合、GUI 差分システムは作業コピーのスナップショットを別の場所に作成し、
そのファイルのサイズと日付を記録しておきます。
差分表示ツールが閉じられたとき、さきほどのファイルサイズと日付を元に比較し、
変更が加えられていた場合はそのファイルをオリジナルの作業コピーに書き戻します。
このようにしてディレクトリ差分であっても差分表示ツール上からファイルの書き換えが可能になっています。

GUI 差分ウィンドウが作業コピーの比較に使用された場合、
常に1つのファイルに対して操作されるため、作業コピーのファイルを元に差分を抽出します。

.. note::
	:menuselection:`TortoiseHg --> 差分ウィンドウをスキップ`
	のオプションは削除されました。

ツールの追加
~~~~~~~~~~~~

使っている GUI 差分表示ツールを TortoiseHg がサポートしてないときは
ホームディレクトリにある :file:`Mercurial.ini` ファイルにツール設定を追加することができます。
詳しい設定方法については Mercurial の
`ドキュメント <https://www.selenic.com/mercurial/hgrc.5.html#merge-tools>`_
を参照してください。それが終わったら TortoiseHg が使用する設定項目を追加してください： ::

	diffargs:  2つのファイル比較に使用される引数です
	diff3args: 3つのファイル比較に使用される引数です
	dirdiff:   2つのディレクトリ比較をサポートするツールの場合に使用する引数です
	dir3diff:  3つのディレクトリ比較をサポートするツールの場合に使用する引数です

コマンドライン引数には以下の変数を使用することができます： ::

	$parent1:  1つ目の親リビジョンのファイルまたはディレクトリ
	$parent2:  2つ目の親リビジョンのファイルまたはディレクトリ
	$child:    比較元のリビジョンのファイルまたはディレクトリ
	$parent:   $parent1 の別名

	$plabel1:  1つ目の親リビジョンのシンボル名
	$plabel2:  2つ目の親リビジョンのシンボル名
	$clabel:   比較元のリビジョンのシンボル名

もちろん $parent2 と $ancestor は 3-way 差分を使用するときにのみ意味を持ちます。
使用している差分表示ツールが共通の祖先リビジョンを扱うことができないのであれば、
diff3args から削除しても構いません。

.. note::
	Windows では `executable` 引数において環境変数を ${ProgramFiles}
	という書き方で使用することができます。

未設定の場合、 **diffargs** のデフォルト値は '$parent $child'、
**diff3args** は "" (空文字) になるため、デフォルトでは 3-way
比較が無効となります。

新しく設定を作成したり、既存のツールの設定を改良したときは
是非私たちの開発メーリングリストに投稿してください。
将来のリリースで利用させていただきます。


Office ファイルの差分
~~~~~~~~~~~~~~~~~~~~~

TortoiseHg の Windows インストーラには様々なバイナリファイルを比較・マージするために
TortoiseSVN のスクリプトを同梱しています。
それらは TortoiseHg のインストールディレクトリにある
:file:`mergepatterns.rc` ファイルで設定されているため、
使用にあたって特別な追加設定などは不要です。

ファイルの拡張子によって使用する差分表示ツールを変更するために、
TortoiseHg は Mercurial の
`merge-patterns <https://www.selenic.com/mercurial/hgrc.5.html#merge-patterns>`_
にならって **[diff-patterns]** セクションをサポートしています。


ツリービュー内検索
------------------

ステータス、コミット、シェルフ、チェンジログツールのファイル一覧、
チェンジログビューアのグラフ表示パネル、リポジトリ検索ツールのコメントパネルなど
多くの TortoiseHg ダイアログでツリービューを利用しています。

TortoiseHg のツリービューの大部分はインクリメンタル検索が可能です。
どれか行を1つ選択するなどして、ツリービューがフォーカスされている状態で
検索キーワードの入力を始めてください。入力した検索キーワードを含む小さな
テキスボックスが表示されて、ツリービューは最初にマッチした行にジャンプします。
さらに入力を続けると検索結果が絞られます (エンターキーを押しても次のマッチ項目
にジャンプしないので注意してください。検索ボックスが消えて検索が終了してしまいます)。

* :kbd:`Ctrl-F` は明示的に検索テキストボックスを開きます
* :kbd:`Ctrl-G` 次にマッチした行に移動します
* :kbd:`Shift-Ctrl-G` 前にマッチした行に移動します
* マウスのホイールを回転させると前後のマッチ行に移動します

HG コマンドダイアログ
---------------------

TortoiseHg ダイアログの多くは Mercurial のコマンド実行の状況をリアルタイムに
表示するため *hgcmd* を使用しています。

.. figure:: figures/hgcmd.png
	:alt: Mercurial コマンドダイアログ

	Mercurial コマンドダイアログ

.. note::
	エラーメッセージは目立つように赤い文字として表示されます

Mercurial コマンドの実行が終了したとき、ダイアログは :guilabel:`閉じる` ボタンに
フォーカスを移動させます。そのため :kbd:`Enter` キーを押すだけでウィンドウを
閉じることができます。

.. vim: noet ts=4
