[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23. 絵の編集

テキスト文字で書いた絵(たとえば, プログラムのコメントとして レジスタをフィールドに分割した絵)を編集するには, コマンドM-x edit-pictureを使って ピクチャー(picture)モードに入ります.

ピクチャー(picture)モードでは, 1/4平面モデル(quarter-plane)に基づいて編集を行います. つまり, 右側と下側に無限に続く領域にテキスト文字が散在するのです. このモデルでは行末は存在しません. 行中で空白でない文字が最後に現れる場所がわかるだけです.

もちろん, Emacsはつねにテキストを文字の列としてとらえ, 実際には行に終りがあります. しかし, ピクチャー(picture)モードでは, よく使われるコマンドの大部分を 1/4平面モデルに従って動作するように置き換えています. 空白を挿入したりタブを空白に置き換えることで, そのようにします.

Emacsの基本的な編集コマンドの大部分は, ピクチャー(picture)モードでは 1/4平面モデルにおいて本質的には同じ動作をするように再定義されています. さらに, ピクチャー(picture)モードでは, C-cで始まるキー列を絵の編集用の特別なコマンドとして定義します.

これらのキーの1つであるC-c C-cは非常に重要です. 絵が, 普通は別のメジャーモードで編集される大きなファイルの 一部であることがしばしばあります. M-x edit-pictureは直前のメジャーモードを記録しておき, あとでC-c C-cコマンド(picture-mode-exit)で そのモードに戻れるようにします. また, 数引数を指定しなければ, C-c C-cは行末の空白を削除します.

ピクチャー(picture)モードのすべての特別なコマンドは, (‘picture’ライブラリがロードされていれば) 他のモードでも使えますが, ピクチャー(picture)モード以外では キーにバインドされていません. 以下では『1桁』移動などと説明しますが, ピクチャー(picture)モードのすべてのコマンドは, それに対応する通常のコマンドと同じように数引数を扱えます.

ピクチャー(picture)モードに入るときに フックpicture-mode-hookを実行します(see section フック).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1 ピクチャーモードの基本編集

ピクチャー(picture)モードでも, ほとんどのキーは通常と同じ動作をしますが, 1/4平面流の動作です. たとえば, C-fは, picture-forward-columnを実行するように再定義してあります. このコマンドはポイントを1桁右に動かし, 必要なら空白を挿入して, 行末がないかのようにふるまいます. C-bは, picture-backward-columnを実行するように再定義してあります. このコマンドはポイントを1桁左に動かし, 必要に応じてタブを複数の空白に変換します. C-nC-pは, それぞれpicture-move-downpicture-move-upを実行するように再定義してあります. これらのコマンドは, 必要に応じて空白を挿入したりタブを変換して, ポイントが同じ桁位置に留まるように移動します. C-epicture-end-of-lineを実行します. このコマンドは, 行の最後の白文字以外の文字の直後に移動します. 画面モデルは行頭には影響しないので, C-aを変更する必要はありません.

テキストの挿入は, 上書き(overwrite)モードを用いて 1/4平面モデルに対応させてあります(see section マイナモード(minor mode)). 自己挿入文字は, 既存のテキストを右側へ押しやるのではなく, 既存のテキストを桁ごとに置き換えます. <RET>はpicture-newlineを実行します. このコマンドは, つぎの行の先頭に移動し, その行が新たなテキストで置き換わるようにします.

ピクチャー(picture)モードでは, テキストの削除やキルのかわりに消去します. <DEL>(picture-backward-clear-column)は, 直前の文字を削除するのではなく空白で置き換え, また, ポイントを1つまえに戻します. C-dpicture-clear-column)は直後の1つ以上の文字を 空白で置き換えますが, ポイントは動かしません. (文字を空白で置き換えて, かつ, ポイントを先へ進めるには, <SPC>を使う. ) C-kpicture-clear-line)は行の内容を実際にキルしますが, バッファから改行を削除しません.

実際に挿入を行うには, 特別なコマンドを使う必要があります. C-opicture-open-line)は, 現在行のつぎに空行を作りますが, 行を分割しません. C-M-osplit-line)は ピクチャー(picture)モードでも意味があるので変更してありません. C-jpicture-duplicate-line)は 現在行の下に現在行と同じ内容の行を挿入します.

ピクチャー(picture)モードで実際に削除を行うには, C-wか (他のモードでのC-dと同じdelete-charに定義されている) C-c C-d, あるいは, 絵の矩形領域コマンドの1つを使います (see section ピクチャーモードの矩形領域コマンド).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.2 挿入後のポイント移動制御

ピクチャー(picture)モードでは『自己挿入』文字は 上書きしてポイントを動かしますから, ポイントをどのように動かすかについて本質的な制限はありません. 通常ポイントは右に動きますが, 『自己挿入』文字のあとで 上下左右斜めの8方向のいずれの方向へ移動するか指定できます. これは, バッファに直線を引くときに役立ちます.

C-c <

挿入後, 左へ移動(picture-movement-left).

C-c >

挿入後, 右へ移動(picture-movement-right).

C-c ^

挿入後, 上へ移動(picture-movement-up).

C-c .

挿入後, 下へ移動(picture-movement-down).

C-c `

挿入後, 左上(『北西』)へ移動(picture-movement-nw).

C-c '

挿入後, 右上(『北東』)へ移動(picture-movement-ne).

C-c /

挿入後, 左下(『南西』)へ移動(picture-movement-sw).

C-c \

挿入後, 右下(『南東』)へ移動(picture-movement-se).

2つの移動コマンドは, 現在指定されている挿入後の移動方向に基づいて動作します. コマンドC-c C-fpicture-motion)は, 現在指定されている『挿入』後の移動方向と同じ方向へ移動しますが, C-c C-bpicture-motion-reverse)は反対方向へ移動します.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.3 ピクチャーモードのタブ

ピクチャー(picture)モードにはタブ相当の動作が2種類あります. 文脈に基づくタブを行うにはM-<TAB>picture-tab-search)を使います. 引数を指定しないと, 先行する空行でない行において白文字に続く 『興味ある』つぎの文字の下方に移動します. ここで『つぎ』とは『開始位置より水平位置が1より大きい』という意味です. C-u M-<TAB>のように引数を指定すると, 現在行において『興味ある』文字に移動します. M-<TAB>はテキストを変更せずにポイントを移動するだけです. 『興味ある』文字は, 変数picture-tab-charsで定義されますが, 文字集合を定義する必要があります. この変数の構文は正規表現で使われる‘[…]’の構文に似ていますが, ‘[’と‘]’で囲みません. この変数のデフォルト値は"!-~"です.

<TAB>それ自身は, picture-tabを実行します. このコマンドは, 現在のタブストップの設定に基づいて動作します. これは他のモードのtab-to-tab-stopに相当します. 通常これはポイントを動かすだけですが, 数引数を指定すると移動先までのテキストをクリアします.

文脈に基づくタブとタブストップに基づくタブは, コマンドC-c <TAB>picture-set-tab-stops)で 結び付けることができます. このコマンドは, 現在行においてM-<TAB>が重要と考える位置に タブストップを設定します. <TAB>とともにこのコマンドを使えば, 文脈に基づくタブと同じ効果を得られます. しかし, M-<TAB>で十分ならばそのほうが便利でしょう.

本当のタブ文字を絵に使わないように抑制したほうが便利な場合があります. たとえば, C-x <TAB>で絵をめちゃくちゃにしてしまうことを防止できます. タブ文字の使用を抑制するには, 変数indent-tabs-modenilを設定します. See section タブと空白.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.4 ピクチャーモードの矩形領域コマンド

ピクチャー(picture)モードでは, 1/4平面モデルに適合するように, テキストの矩形領域に作用するコマンドを定義します. 標準的な矩形領域コマンドも役立つでしょう (see section 矩形領域).

C-c C-k

矩形領域を空白でクリアする(picture-clear-rectangle). 数引数を指定するとテキストを削除する.

C-c C-w r

同様だが, まず矩形領域の内容をレジスタrに保存する (picture-clear-rectangle-to-register).

C-c C-y

ポイント位置を左上隅として最後にキルした矩形領域をバッファに上書きする (picture-yank-rectangle). 数引数を指定すると挿入する.

C-c C-x r

同様だが, レジスタrの矩形領域を使う (picture-yank-rectangle-from-register).

絵の矩形領域コマンド, C-c C-kpicture-clear-rectangle)と C-c C-wpicture-clear-rectangle-to-register)は, 標準の矩形領域コマンドが矩形領域を削除するのに対しクリアする点で異なります. これは, ピクチャー(picture)モードでのC-dの意味の変更方法に 類似したものです.

しかし, ピクチャー(picture)モードでも矩形領域の削除は便利なので, 数引数を与えるとこれらのコマンドは矩形領域を削除します. 引数を指定してもしなくてもC-c C-kC-c C-yのために矩形領域を(レジスタに)保存します.

ピクチャー(picture)モードのヤンクコマンドは標準のそれとは, 挿入のかわりに上書きする点で異なります. これはピクチャー(picture)モードでのテキストの挿入が 他のモードでのそれと異なっているのと同じです. C-c C-ypicture-yank-rectangle)は, もっとも最近にキルした矩形領域を(上書きで)挿入しますが, C-c C-xpicture-yank-rectangle-from-register) は同様のことを指定されたレジスタ内の矩形領域で行います.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 新堂 安孝 on September 22, 2009 using texi2html 1.82.