physical-line-mode

[ English | Japanese ]

最新版

2004-04-15
2003-02-11
2002-10-16
2002-09-02
2002-08-27
2002-05-18
2002-05-13
2002-05-12

physical-line-mode とは

physical-line-mode は (英語的に正しいのか大いに不安ですが), Emacs 上で物理行移動を実現するマイナーモードです.

Emacs では例えば横 80 文字分の横幅のウインドウで, 1 行が 80 文字を 超えるものを表示する場合, その 1 行が 2 行にわたって表示されます. (実際には設定によって, 横スクロールをするようにもできます). こうした場合に縦方向にカーソルを移動すると, 実際には 1 行でも 2 行に見えているのだから見えているままに移動してほしいと思うのですが, 実際にはそうならずに, 論理的な次の行に進んでしまいます. それを 論理的な行ではなくて物理的な行 (つまり見えているまま) で 移動できるようにしようというのが physical-line-mode です.

インストール

Debian パッケージ

http://www.taiyaki.org/debian/ にある physical-line-el パッケージを インストールして下さい. .emacs への設定は不要です.

apt を利用したい場合は, 以下の設定を /etc/apt/sources.list に 追加して下さい.

deb http://www.taiyaki.org/debian ./

ダウンロード

http://www.taiyaki.org/elisp/physical-line/src/ から physical-line.el を適当な場所にダウンロードしてください.

.emacs の設定

必要なファイルを ~/elisp/ 以下にダウンロードしたとします. 次に ~/.emacs などに次の 2 行を追加してください. 1 行目は既に書いてあれば必要ありません.

(setq load-path (cons (expand-file-name "~/elisp") load-path))
(load "physical-line")
  

使い方

M-x physical-line-mode を実行するとモードラインに "PL" 表示されて カーソル移動が物理行に対応します. もう一度 M-x physical-line-mode を 実行すれば元に戻ります. また C-u M-x physical-line-mode で現在の状態に 関わらずつねに物理行に対応し, C-u - M-x physical-line-mode でその 逆になります.

Emacs 全体で物理行移動を行いたい場合は M-x physical-line-on を実行して 下さい. M-x physical-line-on を実行したのであれば M-x physical-line-mode の 実行は必要ありません. また, M-x physical-line-off で物理行移動から 論理行移動に戻ります.

2002-05-12 以降から beginning-of-line (C-a), end-of-line (C-e) も物理行 対応になりました.

コマンド一覧

physical-line-mode
物理行移動マイナーモードを ON/OFF する
physical-line-on
Emacs 全体を物理行移動にする
physical-line-off
Emacs 全体を論理行移動にする
physical-line-next-line
物理行で下に移動する.
physical-line-previous-line
物理行で上に移動する.
physical-line-end-of-line
物理行末に移動する.
physical-line-beginnig-of-line
物理行頭に移動する.
physical-line-next-logical-line
論理行で下に移動する.
physical-line-previous-logical-line
論理行で上に移動する.
physical-line-end-of-logical-line
論理行末に移動する.
physical-line-beginnig-of-logical-line
論理行頭に移動する.

カスタマイズ

Emacs 全体を物理行対応にする

physical-line-on, physical-line-off を利用して物理行移動モードを ON/OFF できます. また physical-line-ignoring-mode-list を設定することにより 特定のメジャーモードだけを論理行移動のままにすることも可能です.

(physical-line-on)
;; dired-mode と text-mode は論理行移動のままにする.
(setq physical-line-ignoring-mode-list '(dired-mode text-mode))

Text モードをつねに物理行対応にする

Text に限らずたいていのメジャーモードには <モード名>-hook があるので これを利用します.

(add-hook 'text-mode-hook 'physical-line-mode-on)
  

カーソル上下のみを物理行移動にする

"C-p", "C-n" は論理行移動のままで, カーソルの上下だけを 物理行移動させたい場合, physical-line-previous-line および physical-line-next-line を使います. これらのコマンドは physical-line-on や physical-line-mode などの状態とは関係なく物理行移動が可能です.

(global-set-key [up]    'physical-line-previous-line)
(global-set-key [down]  'physical-line-next-line)

逆に常に論理行移動するためのコマンドは physical-line-logical-previous-line, physical-line-logical-next-line です.

バグ & TODO

Emacs21 について

Emacs21 上で使う場合, 物理行末にタブ文字を含んでいるテキストでは カーソル移動がおかしくなります.

原因は Emacs21 のバグにあります. Emacs21 の関数 vertical-motion が いわゆる全角文字およびタブ文字に正しく対応できていないために起きて しまうバグです. physical-line では, この vertical-motion のバグを 吸収すべく, いくつかの特別な処理をしています. しかし完全にバグを回避することは諦めました.

メーリングリスト

physical-line-mode 限定のメーリングリストではありませんが, 小松が作成している ELisp 全般に関してのメーリングリストを QuickMLで作成しました.

参加される方は, 以下のようなメールを送信してください. また Cc: に自分のメールアドレスを付けないでください. QuickML の仕様上, Cc: に参加者以外のメールアドレスがあると 参加できません.

To: elisp@taiyaki.quickml.com
From: (自分のアドレス)
Cc: komatsu@taiyaki.org
Subject: 参加します (お名前)

(本文にかるく自己紹介でもお願いします)

更新履歴

2003-02-11
2002-10-16
2002-09-02
2002-08-27
2002-05-18
2002-05-13
2002-05-12
2002-05-09
2002-01-16
2002-01-15
2001-10-23
2001-08-30
2001-05-19

バグ & TODO


ホームページ
天照
ELisp
replace-region
rectangle
ac-mode
accel-key
table
wordnet
urlencode
visible-mark
physical-line-mode
my-keisen-mule
myimage
text-adjust
Palm
Linux & Unix
日記
観測カメラ
Index を閉じる
小松 弘幸 <komatsu@taiyaki.org>
$Id: index.html,v 1.7 2004/04/16 02:29:04 komatsu Exp $