GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Filling.html ・ emacs-doc.conao3.com

33.11 塗りつぶし

詰めとは、行の長さを(改行位置を移動させることで)指定された最大幅とほぼ等しく(ただし最大幅を超えないように)調整することを指します。また、行を両端揃えにすることもでき、これはスペースを挿入して左右の余白を正確に揃えることを意味します。幅は変数fill-columnによって制御されます。読みやすさの観点から、行の長さは70列程度以内に抑えるべきです。

自動入力モード(自動入力を参照)を使用すると、テキストの挿入に合わせて自動的に入力できますが、既存のテキストに変更が加えられた場合、正しく入力されないことがあります。その場合は、手動でテキストを入力する必要があります。

本セクションのコマンドの多くは、意味のない値を返します。塗りつぶしを行うすべての関数は、現在の左マージン、現在の右マージン、および現在の配置スタイルを認識します(塗りつぶし用のマージンを参照)。現在の配置スタイルが none の場合、塗りつぶし関数は実際には何も行いません。

いくつかの充填関数には引数 justify があります。これが nil 以外の場合、何らかの正当化が求められます。特定の形式の正当化を求めるには、left、right、full、または center を指定できます。t の場合は、このテキスト部分に対して現在の正当化スタイルを使用することを意味します(後述の current-justification を参照)。それ以外の値はすべて full として扱われます。

フィリング関数を対話的に呼び出す際、接頭辞引数を指定すると、justify に値 full が代入されます。

コマンド: fill-paragraph &optional justify region

このコマンドは、ポイント以降の段落を埋めます。justify が nil 以外の場合、各行も均等揃えされます。段落の境界の検出には、通常の段落移動コマンドが使用されます。The GNU Emacs Manual の Paragraphs を参照してください。

region が nil でない場合、一時マークモードが有効でマークがアクティブであれば、このコマンドは現在の段落のみを埋めるのではなく、領域内のすべての段落を埋めるために fill-region を呼び出します。このコマンドを対話的に呼び出した場合、region は t となります。

コマンド: unfill-paragraph arg &optional beg end

このコマンドは直前のコマンドの逆の動作を行い、現在の段落の行を結合します。数値の接頭辞引数 arg を指定すると、その数だけ段落に対してこの操作が適用されます。接頭辞引数がなく、かつアクティブリージョンがある場合は、そのリージョン内の各段落の空白を削除します。Lispから arg nil および beg と end が nil でない状態で呼び出された場合は、beg と end で区切られたリージョン内の段落の空白を削除します。

コマンド: fill-region start end &optional justify nosqueeze to-eop

このコマンドは、startからendまでの範囲にある各段落を均等割り付けします。また、justifyがnilでない場合は、両端揃えも行います。

nosqueeze が nil 以外の場合、改行以外の空白はそのままにすることを意味します。to-eop が nil 以外の場合、段落の末尾まで――あるいは use-hard-newlines が有効であれば次のハード改行まで――埋め続けることを意味します(後述)。

変数 paragraph-separate は、段落の区切り方を制御します。編集で使用される標準正規表現を参照してください。

関数: pixel-fill-region start end pixel-width

ほとんどのEmacsバッファでは等幅フォントが使用されているため、すべての塗りつぶし関数(fill-regionなど)は文字数とchar-widthに基づいて動作します。しかし、Emacsでは画像を含むテキストやプロポーショナルフォントなど、他の種類の表示も可能であり、pixel-fill-regionはそうしたケースに対応するために用意されています。これはstartとendの間のテキスト領域をピクセル単位で塗りつぶすため、可変ピッチフォントや複数の異なるフォントを使用したテキストであっても、文字サイズに関わらず塗りつぶされたように見えます。引数pixel-widthは、塗りつぶし後の1行の最大ピクセル幅を指定するもので、fill-regionにおけるfill-columnに相当するピクセル解像度の値です。例えば、このLispスニペットはプロポーショナルフォントを使用してテキストを挿入し、それを300ピクセル以下の幅で塗りつぶします:

(insert (propertize
	 "This is a sentence that's ends here."
	 'face 'variable-pitch))
(pixel-fill-region (point) (point-max) 300)

start が行頭にない場合、ピクセル単位に変換された start の水平位置が、後続の行のインデント接頭辞として使用されます。

pixel-fill-width ヘルパー関数を使用すると、使用するピクセル幅を算出できます。引数を指定しない場合は、現在のウィンドウ幅よりわずかに小さい値が返されます。1つ目のオプション値 columns は、標準的な等幅フォントを使用する際の列数を指定します(例:fill-column)。2つ目のオプション値は、使用するウィンドウです。通常は次のように使用します:

(pixel-fill-region
  start end (pixel-fill-width fill-column))
コマンド: fill-individual-paragraphs start end &optional justify citation-regexp

このコマンドは、リージョン内の各段落を、それぞれのフィルプレフィックスに従って塗りつぶします。したがって、段落の行がスペースでインデントされている場合、塗りつぶされた段落も同様にインデントされたままになります。

最初の2つの引数 start と end は、塗りつぶし対象領域の開始位置と終了位置です。3番目と4番目の引数 justify と citation-regexp は省略可能です。justify が nil 以外の場合、段落は塗りつぶしに加えて両端揃えされます。citation-regexp が nil 以外の場合、この関数はメールメッセージを処理しているため、ヘッダー行を塗りつぶすべきではないことを意味します。citation-regexp が文字列の場合、それは正規表現として使用され、行の先頭に一致した場合、その行は引用マーカーとして扱われます。

通常、fill-individual-paragraphs はインデントの変更をそれぞれ新しい段落の開始とみなします。fill-individual-varying-indent が nil でない場合、段落間は区切り線のみで区切られます。このモードでは、1行目に追加のインデントがあるインデント付き段落を扱うことができます。

ユーザーオプション: fill-individual-varying-indent

この変数は、上述の通りfill-individual-paragraphsの動作を変更します。

コマンド: fill-region-as-paragraph start end &optional justify nosqueeze squeeze-after

このコマンドは、テキストの領域を一つの段落とみなして塗りつぶします。このコマンドの動作は変数 fill-region-as-paragraph-function によって制御され、デフォルトの実装は fill-region-as-paragraph-default となっており、これについては以下で詳しく説明します。

リージョンが多数の段落で構成されている場合、段落間の空行は削除されます。この関数は、justify が nil でない場合に、正当化と塗りつぶしの両方を行います。

nosqueeze が nil 以外の場合、改行以外の空白はそのままにすることを意味します。squeeze-after が nil 以外の場合、領域内の位置を指定し、その位置より前の改行以外の空白はそのままにすることを意味します。

Adaptive Fillモードでは、このコマンドはデフォルトで塗りつぶしプレフィックスを選択するためにfill-context-prefixを呼び出します。Adaptive Fillモードを参照してください。

コマンド: justify-current-line &optional how eop nosqueeze

このコマンドは、現在の行の単語間にスペースを挿入し、行がちょうど fill-column で終わるようにします。nil を返します。

引数 how が nil 以外の場合、正当化スタイルを明示的に指定します。値は left、right、full、center、または none のいずれかとなります。t の場合は、指定された正当化スタイルに従うことを意味します(後述の current-justification を参照)。nil は、完全な正当化を行うことを意味します。

eop が nil でない場合、current-justification で完全均等割り付けが指定されているときのみ、左揃えを行うことを意味します。これは段落の最終行に使用され、段落全体が完全均等割り付けであっても、最終行は均等割り付けにすべきではありません。

nosqueeze が nil でない場合、内部の空白文字を変更しないことを意味します。

ユーザーオプション: default-justification

この変数の値は、テキストプロパティでスタイルが指定されていないテキストに使用する均等割り付けのスタイルを指定します。指定可能な値は left、right、full、center、または none です。デフォルト値は left です。

関数: current-justification

この関数は、point周辺のテキストを埋める際に使用すべき適切な配置スタイルを返します。

これは、ポイントにおける justification テキストプロパティの値、またはそのようなテキストプロパティが存在しない場合は変数 default-justification を返します。ただし、「右揃えしない」という意味で、none ではなく nil を返します。

ユーザーオプション: sentence-end-double-space

この変数が nil 以外の場合、ピリオドの後にスペースが1つだけ続く箇所は文末とはみなされず、フィル機能はこのような箇所で改行しないようにします。

ユーザーオプション: sentence-end-without-period

この変数が nil 以外の場合、文はピリオドなしで終了できます。これは、文末に2つのスペースを置くがピリオドは付けないタイ語などの言語で使用されます。

ユーザーオプション: sentence-end-without-space

この変数が nil 以外の場合、後続のスペースなしで文を完結できる文字列である必要があります。

ユーザーオプション: fill-separate-heterogeneous-words-with-space

この変数が nil 以外の場合、行末にある単語と次行頭にある単語を連結して埋める際、種類の異なる2つの単語(例:英語とCJK)はスペースで区切られます。

変数: fill-paragraph-function

この変数は、段落の塗りつぶしを上書きするための手段を提供します。その値がnil以外の場合、fill-paragraphはこの関数を呼び出して処理を行います。関数がnil以外の値を返した場合、fill-paragraphは処理が完了したと判断し、直ちにその値を返します。

この機能の一般的な用途は、プログラミング言語モードにおいてコメントを補完することです。関数が通常の方法で段落を補完する必要がある場合は、次のように記述できます。

(let ((fill-paragraph-function nil))
  (fill-paragraph arg))
変数: fill-forward-paragraph-function

この変数を使用すると、fill-region や fill-paragraph といったフィル機能が次の段落へどのように進むかを上書きできます。その値は関数である必要があり、移動させる段落数である単一の引数 n を受け取って呼び出され、n と実際の移動段落数との差分を返す必要があります。この変数のデフォルト値は forward-paragraph です。The GNU Emacs Manual の Paragraphs を参照してください。

変数: fill-region-as-paragraph-function

この変数を使用すると、fill-paragraph や fill-region といった関数によるテキストの塗りつぶし方法を上書きできます。その値は関数である必要があり、fill-region-as-paragraph で定義された引数を受け取り、塗りつぶしに使用されるプレフィックスを返す必要があります。この変数のデフォルト値は fill-region-as-paragraph-default です。

変数: use-hard-newlines

この変数が nil 以外の場合、フィル関数は hard テキストプロパティを持つ改行を削除しません。これらのハード改行は段落区切りとして機能します。The GNU Emacs Manual の ハード改行とソフト改行 を参照してください。