Emacsコマンド C-x 4 a は、編集中のファイル (add-change-log-entry-other-window)
の変更履歴ファイルに新しいエントリを追加します。そのファイルが実際にはバックアップファイルである場合、ファイルの親ファイルに適したエントリが作成されます。これは、現行バージョンで削除された関数のログエントリを作成する際に便利です。
C-x 4 a は、選択中のウィンドウとは別のウィンドウで変更履歴ファイルを開き(display-buffer
の仕組みを参照)、最新のエントリが本日の日付と自身の名前でない限り、新しいエントリを作成します。また、現在のファイルに対しても新しい項目を作成します。多くの言語では、変更された関数やその他のオブジェクトの名前を推測することさえ可能です。
変更履歴ファイルを探す際、Emacsは編集中のファイルからディレクトリツリーを遡って検索します。デフォルトでは、バージョン管理リポジトリのルートと思われるディレクトリが見つかった時点で検索を停止します。この動作を変更するには、change-log-directory-filesをカスタマイズしてください。
変数 add-log-keep-changes-together が nil 以外の場合、C-x 4 a
は新しい項目を開始するのではなく、ファイル内の既存の項目に追記されます。
同じ性質の変更を複数まとめて記述できます。最初の C-x 4 a の後にテキストを入力しない場合、それ以降の C-x 4 a ごとに変更履歴のエントリに別の記号が追加されます。
add-log-always-start-new-record が nil でない場合、たとえ直前のエントリが同一日付で自身によって作成されたものであっても、C-x 4 a は常に新しいエントリを作成します。
変数 change-log-version-info-enabled の値が nil 以外の場合、C-x 4 a
はファイルのバージョン番号を変更履歴エントリに追加します。バージョン番号は、変数 change-log-version-number-regexp-list
の正規表現を用いてファイルの先頭10%を検索することで取得します。
変更履歴ファイルは、「変更履歴モード」で表示されます。このメジャーモードでは、グループ化された項目のまとまりが1つの段落として扱われ、各エントリが1ページとみなされます。これにより、エントリの編集が容易になります。C-j と自動インデント機能により、新しい行はそれぞれ前の行と同様にインデントされます。これは、エントリの内容を入力する際に便利です。
チェンジログモードが有効なとき、コマンド change-log-goto-source(デフォルトでは C-c
C-c にバインドされています)を使用すると、ポイント付近にあるチェンジログエントリのソース位置へ移動できます。その後、next-error コマンド(デフォルトでは M-g M-n
および C-x `
にバインドされています)を繰り返し実行することで、チェンジログ内のエントリ間を移動できます。単に次のチェンジログエントリへ移動するのではなく、実際に変更されたファイル内の該当箇所へジャンプします。また、previous-error を使用してチェンジログのエントリを遡ることも可能です。
Change Log Modeでは、M-x change-log-mergeコマンドを使用して他のログファイルをバッファにマージでき、エントリの日付順を維持できます。
バージョン管理システムは、プログラムの変更履歴を追跡し、変更ログを保持するためのもう一つの手段です。VCSを利用している多くのプロジェクトでは、現在では別途バージョン管理された変更ログファイルを保持していないため、リポジトリ内にそのようなファイルを設けないようにしたい場合があるでしょう。add-log-dont-create-changelog-file の値が nil 以外である場合、C-x 4 a (add-change-log-entry-other-window)
のようなコマンドは、該当するファイルが存在しない限り、ファイルではなく適切に命名された一時バッファに変更内容を記録します。
変更履歴ファイルを使用している場合でも、変更履歴用に一時バッファを使用している場合でも、VC Logバッファに C-c
C-a (log-edit-insert-changelog)
と入力することで、該当する変更履歴エントリ(存在する場合)を挿入できます。ログエントリバッファの機能を参照してください。