シフトキーを押しながらカーソル移動コマンドをタイプすると、ポイントを移動する前の位置にマークをセットするので、リージョンが元のポイント位置から新しいポイント位置に拡張されます。この機能はシフト選択(shift-selection)と呼ばれます。これは他のエディターでテキストを選択する方法と似ています。
シフト選択によるマークのセットは、これまでの説明とは少し異なる振る舞いをします。最初に、マークを非アクティブにする通常の方法(バッファーのテキストを変更したりC-gをタイプするなど)に加え、シフトキーを押さない(unshifted)カーソル移動コマンドでも、マークが非アクティブになります。次に、連続するシフトキーを押した(shifted)カーソル移動コマンドでは、マークの更新はされません。つまりシフトキーを押しながらカーソル移動コマンドを繰り返すと、リージョンは継続的に変更されます。
シフト選択は、シフトキーを押したカーソル移動キーが、別のコマンドにバインドされていない場合のみ動作します(カスタマイズを参照してください)。たとえばS-C-fを他のコマンドにバインドしていると、S-C-fはシフト選択バージョンのC-f
(forward-char
)ではなく、バインドされたコマンドを実行します。
マウスコマンドによるマークのセットも、シフト選択によるマークのセットと同様です(マークのセットを参照してください)。たとえばマウスをドラッグしてリージョンを指定すると、シフトキーを押したカーソル移動コマンドを使って、そのリージョンの拡張を続けることができます。どちらのケースも、シフトキーを押さないカーソル移動コマンドで、マークが非アクティブになります。
シフト選択をオフにするには、shift-select-mode
をnil
にセットします。これを行ってもマウスコマンドを通じたマークのセットは無効になりません。shift-select-mode
に値permanent
をセットするとシフト変換されていないカーソル移動キーによるマークの非アクティブ化が行われなくなり、たとえば前のコマンドでセットされたリージョンはシフト選択で拡張でき、シフト選択でセットされたリージョンはシフトキーを押していないカーソルキーで拡張されることになります。