ウィンドウには、下部にモードラインがあるように、上部にヘッダーラインを設けることができます。ヘッダーライン機能はモードライン機能と同様に動作しますが、header-line-formatによって制御される点が異なります。
すべてのバッファでローカルなこの変数は、バッファを表示するウィンドウにおけるヘッダー行の表示方法を指定します。値の形式は mode-line-format と同様です(モードラインのデータ構造 を参照)。通常は nil となっており、これにより通常のバッファにはヘッダー行が表示されません。
バッファで display-line-numbers-mode が有効になっている場合(The GNU Emacs Manual の display-line-numbers-mode
を参照)、バッファのテキストは、行番号を表示するために必要な画面スペース分だけインデントされて表示されます。対照的に、ヘッダー行のテキストは自動的にインデントされません。これは、ヘッダー行に行番号が表示されることがなく、またヘッダー行のテキストが必ずしもその下のバッファテキストと直接的に関連しているとは限らないためです。Lispプログラムでヘッダー行のテキストをバッファテキストと揃える必要がある場合(例えば、tabulated-list-mode のようにバッファが列形式のデータを表示する場合。Tabulated List mode
を参照)、マイナーモード header-line-indent-mode
を有効にする必要があります。
このバッファローカルなマイナーモードは、画面上の行番号表示の幅の変化(ウィンドウに表示される行番号の範囲によって変動する場合がある)を追跡し、行番号の幅が変化した際に、ヘッダー行のテキストが常にバッファテキストと揃うようにLispプログラムで設定することを可能にします。このようなLispプログラムでは、バッファ内でこのモードを有効にし、header-line-format 内の変数 header-line-indent および header-line-indent-width
を使用して、常にテキストのインデントに合わせて調整されるようにする必要があります。
この変数の値は空白文字の文字列であり、その幅は、ウィンドウに表示されているバッファで header-line-indent-mode
が有効になっている場合に限り、ディスプレイ上の行番号の現在の幅と等しく保たれます。スペースの数は、ヘッダー行テキストのフェイスがフレームのデフォルトフォントと同じフォント(サイズを含む)を使用しているという前提で計算されます。この前提が当てはまらない場合は、代わりに後述する
header-line-indent-width
を使用してください。この変数は、バッファテキストとの再配置のためにヘッダー行テキスト全体をインデントする必要があるという単純な状況において、実際のヘッダー行テキストの先頭にこの変数の値を付加して使用することを想定しています。例えば、以下のような
header-line-format の定義があります:
(setq header-line-format
`("" header-line-indent ,my-header-line))
ここで my-header-line
はヘッダー行の実際のテキストを生成するフォーマット文字列であり、ヘッダー行のテキストが常にその下のバッファテキストと同様にインデントされるようにします。
この変数の値は、ウィンドウに表示されているバッファで header-line-indent-mode
が有効になっている場合に、行番号の表示に使用されるフレームの正準文字幅を単位とした現在の幅を提供するため、常に最新の状態に保たれます。header-line-indent
では十分な柔軟性が得られない場合に、ヘッダー行のテキストをバッファのテキストと揃えるために利用できます。例えば、ヘッダー行にデフォルトのフェイスとは異なるメトリクスを持つフォントを使用している場合、Lispプログラムはこの変数の値に
frame-char-width が返す値を乗じることで(フレームフォント を参照)、行番号表示の幅をピクセル単位で算出し、その結果を用いて header-line-format の該当箇所に :align-to 表示プロパティ指定(指定スペース を参照)によるピクセル単位のヘッダー行テキストの配置を行うことができます。
この関数は、windowのヘッダー行の高さをピクセル単位で返します。windowにはアクティブなウィンドウを指定する必要があり、デフォルトでは選択中のウィンドウが指定されます。
高さが1行のウィンドウでは、ヘッダー行は表示されません。高さが2行のウィンドウでは、モード行とヘッダー行を同時に表示することはできず、モード行がある場合はヘッダー行は表示されません。