読者です 読者をやめる 読者になる 読者になる

物理行と論理行

misc

今、Emacs テクニックバイブルを読んでいるのだけど、p110 の screen-lines.el での物理行と論理行の説明に引っ掛かった。

物理行とは改行文字まで区切られた文字のことで、論理行とは画面上の見かけの行のことです。
Emacs テクニックバイブル P110 より

私は逆だと思っていた。ので、Google 先生に聞いてみたのだけど、どうやら明確な定義はなさそうな予感。


ざっと調べると物理行=画面上の行の方がどちらかと言うと多数派な気がする。が、逆も少なからずあって、どちらが正しいってことは言えなさそう。
以下 Google 先生に教えて貰った主な文献。

Emacs で、ポイントを物理行単位 (画面上での一行を物理行と呼ぶことにします) で移動させます。

physical-line.el

論理行は、本当の改行で数える行数のことです。文章内の改行の数に依存し、折り返し方法には関係ありません。

EmEditor 用語集: 論理行

物理行と論理行の違いを説明します。物理行とは、画面の折り返しの都合でできる見かけ上の行のことです。スクリーンという物理的制約によって生じる行だから物理行です。一方、ALTAIRが扱うのは論理行です。論理行とは改行コードを終端とする行のことです。論理的な区切りによってできる行だから論理行です。

視覚障害者のためのインターネット活用マニュアル

で、以下が逆の、Emacs テクニックバイブルと同じ感じのもの。

物理的に改行文字(CRLF)で括られた元データの1行を、「物理行」または「段落」と呼び、見かけ上の1行を「論理行(レイアウト行)」または「行」と呼ぶことにします。

ヒント 論理行(レイアウト行)と物理行(VerticalEditor)

これは片方が物理行じゃないけど、

論理行
「論理行」とは、テキスト(一連の文字コード列)内で、改行コードを終端として区切られる各部分のことです。なお、テキストの末尾が改行コードでない場合、そのテキストの最後の論理行だけは、改行コードの終端にはなりません。
表示行
「表示行」とは、テキストが画面上に表示される時の表示上の行のことです。最大表示桁を超える「論理行」は、次の行に折り返して表示されるので、「表示行」と「論理行」は、必ずしも一致しません。

用語説明

これに至っては物理行 = 論理行でさらに別の用語が…

改行記号で区切られた1つの固まり 論理行, 物理行
画面上で左端から折り返し位置まで レイアウト行,キャレット位置
http://members.at.infoseek.co.jp/sakura_editor/doc/position.htm

うーん、どうやらどっちがどっちかは言ったもん勝ちというか、その都度定義しないとダメのようだなぁ。なので本が間違っているという訳ではないようだ。

Emacs では、「改行から改行まで」を 1 行として扱います。
この「改行から改行まで」を、Windows 用エディタの世界などでは
論理行といいます。一方、論理行に対して、画面上の 1 行を物理行と
いいます。

【注意】この「論理行」「物理行」という用語は、必ずしも用法が一定
    していないようで、逆の意味に使う人もいます。その人の感覚
    では、「改行から改行まで」は、メモリ上の物理的な配置に
    由来するから「物理」行であり、「画面上の 1 行」はコンピュ
    ータの物理的な都合には関係なく人間にとっての 1 行であるから
    「論理」行である、ということのようです。

http://www.dennougedougakkai-ndd.org/~delmonta/emacs/16.html

用語の不統一はすごい不便だ…。これらの用語を使うときはちゃんと定義を確認してからの方が良さそう。