Next: , Previous: , Up: マークとリージョン   [Contents][Index]


12.3 リージョンを操作する

一度リージョンを設定すると、それを処理するいくつかの方法があります:

マークが非アクティブのときにはデフォルトの動作をするが、マークがアクティブのときはリージョンを処理するコマンドがいくつかあります。たとえばM-$ (ispell-word)は、通常はポイントのある単語のスペルをチェックしますが、マークがアクティブのときはリージョンの中のテキストをチェックします(スペルのチェックと訂正を参照してください)。通常そのようなコマンドはリージョンが空のとき(たとえばマークとポイントが同じ位置のとき)は、デフォルトの動作をします。空のリージョンにたいして処理を行いたいときは、変数use-empty-active-regiontに変更してください。

テキストの消去で説明したように、DEL (backward-delete-char)とDelete (delete-forward-char)もこの方法で動作します。マークがアクティブのときはリージョンのテキストを削除します(例外として数引数nに1以外が指定されたとき、これらのコマンドはマークがアクティブか関係なく、n文字を削除します)。変数delete-active-regionnilに変更すると、これらのコマンドはマークがアクティブのとき異なる動作をしなくなります。これをkillに変更するとリージョンを削除するかわりに、killするようになります(テキストのkillと移動を参照してください)。

その他のコマンドにはデフォルトの動作はなく、常にリージョンを処理します。通常このようなコマンドには、C-w (kill-region)やC-x C-u (upcase-region)のように、名前にregionがついています。マークが非アクティブのときは非アクティブなリージョン、すなわちポイントと最後にマークをセットした位置の間にあるテキストにたいして処理を行います(マークリングを参照してください)。この動作を無効にするには、変数mark-even-if-inactivenilに変更してください。そうするとこれらのコマンドはマークが非アクティブのときエラーをシグナルします。

デフォルトでは、たとえマークがアクティブであっても通常のテキスト挿入のように、たとえばaをタイプすれば文字aが挿入されて、その後にマークが非アクティブになります。Delete Selectionというマイナーモードでは、この挙動を変更できます。このモードが有効な場合には、マークがアクティブなときにテキストを挿入すると、まずリージョン内のテキストが最初に削除されるのです。ただしこの挙動はdelete-selection-temporary-regionオプションをカスタマイズして調整できます。このオプションのデフォルト値はnilですがtにセットすることもできます。その場合にはマウス(マークのセットを参照)、シフト選択(シフト選択を参照)、あるいはTransient Markモード無効時のC-u C-x C-xによってセットされた一時的にアクティブなリージョンだけは置き換えられるようになります。delete-selection-temporary-regionselectionをセットすることによって、挙動を更に調整できます。この場合にはC-u C-x C-xによってセットされたリージョンは置き換えられずに、マウスのドラッグやシフト選択によってアクティブになったリージョンだけが置き換えられるのです。Delete Selectionのオンとオフを切り替えるにはM-x delete-selection-modeをタイプしてください。