現在、私はそのような列/長方形機能に cua-mode を使用しています (コピー/貼り付けには使用しません):
M-x cua-mode ; Enable cua-mode
<C-return> ; Call cua-set-rectangle-mark
次に、長方形が完成したら:
C-g ; Call cua-cancel
CUA モードのバインドは他のモードのバインド (org モードなど) と競合するため、cua モードのオン/オフを切り替える必要がある場合があります。私はそれを長方形にしか使用していないので、次の2つのことを行うことでこの煩わしさを解決したいと思います:
1) キー (f6 など) を cua-mode が有効になっていない場合は有効にする関数にバインドし、cua-set-rectangle-mark を呼び出して四角形を作成できるようにします。
2) cua-mode がアクティブなときに Cg をオーバーライドして、押されたときに長方形を終了するだけでなく、cua-mode も終了するようにします。
したがって、私のワークフローは次のようになります。
<f6> ; Enter cua-mode and call cua-set-rectangle-mark
C-g ; Call cua-cancel and disable cua-mode
そうすれば、衝突が発生したときに cua-mode のオン/オフを常に切り替える必要がなくなります。
パート1では、私が思いついた:
(defun cua-activate-plus-set-rectangle-mark()
(interactive)
(cua-set-rectangle-mark))
(global-set-key (kbd "<f6>") 'cua-activate-plus-set-rectangle-mark)
cua-mode がすでに有効になっている場合は f6 を押しても機能しますが、cua-mode が有効になっていない場合は機能しません。次のように変更すると:
(defun cua-activate-plus-set-rectangle-mark()
(interactive)
(cua-mode)
(cua-set-rectangle-mark))
その後、cua-mode を有効にして開始したかどうかに関係なく、まったく機能しません。
パート2については、次のものがあります。
(defun cua-mode-off()
"Cancels any open active region/rectangle and turns CUA mode off"
(interactive)
(cua-cancel)
(setq cua-mode nil))
関数はまさに私が望んでいることを実行しますが、cua-mode が有効になっているときに Cg にバインドする方法がわかりません。
だから私の質問:
1) cua-mode に入り、cua-set-rectangle-mark を呼び出す関数を記述して、期待どおりに動作させるにはどうすればよいですか?
2) カスタム関数を呼び出すために cua-mode がアクティブなときに Cg のみをオーバーライドするにはどうすればよいですか?