トランジェントマークモードがアクティブなときのEmacsの通常の動作は、シフト選択を行うと、次のコマンドが非シフト移動の場合、マークが非アクティブ化されることです。たとえば、コマンドM-l
(現在の行を以下の関数でC-f
マークする)との後、マークは無効になります。後にelispからその動作をエミュレートするにはどうすればよい(set-mark-command nil)
ですか?
例えば:
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
ここでMl Cfを実行すると、領域が拡大しますが、代わりにデフォルトの動作、つまりCfのときに領域を非アクティブ化し、CSfで拡大します。
編集:これを可能にするset-mark-commandとは異なる関数を使用する必要がありますか?何も見つかりませんでした。
また、実行したラッパーとバインディングは、
—
Kaushal Modi、
C-f
使用する他のすべてのナビゲーションコマンドにも適用されます。
btw
—
Kaushal Modi
C-f
after M-l
は、末尾にアクティブなリージョンがないため、リージョンを拡張しませんM-l
(downcase-word
デフォルトでバインドされています)。
私はと思い@KaushalModi
—
nispio
M-l
OPによって参照すること(結合デフォルトではありませんdowncase-word
)が、結合のカスタムmy-mark-current-line
確かに@nispio。
—
mikl 2016年
C-S-f
は、C-SPC
(領域のアクティブ化)+C-f
(ナビゲーション)に類似しています。おそらくC-f
、アクティブな場合は最初に領域を非アクティブ化し、次に何をするかを続行するラッパー関数にバインドすることで、必要なものを取得できますC-f
(forward-char
); にC-S-f
直接バインドしforward-char
ます。注あなたはターミナルモードではemacsを使用し、その場合C-f
とC-S-f
の両方動作しますC-f
端末としては、2つを区別することはできません。