マークがアクティブか否かで関数の動作を切り替え
このエントリで plus さんに作ってもらった関数を雛形に作ってみた.
(といっても, 中のコードをちょっと置き換えただけだけどね.)
別に慣れてしまったから問題は無いんだけど, 矩形処理の入力をマークがアクティブかどうかで切り替えれるようなの作ってみた.
あんまりテストしてないから何とも言えないけど, たぶん大丈夫.
(defun my-string-rectangle-or-transpose-chars (&optional arg) (interactive "*P") (if mark-active (progn (string-rectangle (region-beginning) (region-end) (read-from-minibuffer "String rectangle: ")) (setq mark-active nil)) (transpose-chars (or arg 1)))) (defun my-kill-rectangle-or-kill-line (&optional arg &optional fill) (interactive "P") (if mark-active (progn (kill-rectangle (region-beginning) (region-end) fill) (setq mark-active nil)) (kill-line (or arg 1)))) (defun my-yank-rectangle-or-yank (&optional arg) (interactive "*P") (if mark-active (progn (yank-rectangle) (setq mark-active nil)) (yank (or arg 1))))
マークがアクティブのときだけ, 矩形処理として動作する.
こいつらをそれぞれC-t, C-k, C-yに割当てておけば, 矩形処理のキー入力がすこし楽になるかも.
ちょっと試してみようかな.
作ってから検索してみて気付いた.
sense-regionの方が良い.
まあ, elispの勉強になったということで.
ついでにこんなのも作ってみた.
マークがアクティブだったならば, その選択した範囲を削除, もしくは, そこにペーストするって感じの動作(Windows風?).
(defun my-extended-delete-char (&optional arg &optional KILLFLAG) (interactive "*p") (if mark-active (progn (kill-region (region-beginning) (region-end)) (setq mark-active nil)) (delete-char (or arg 1) KILLFLAG))) (defun my-extended-kill-line (&optional arg) (interactive "*p") (if mark-active (progn (kill-region (region-beginning) (region-end)) (setq mark-active nil)) (kill-line (or arg 1)))) (defun my-extended-yank (&optional arg) (interactive "*P") (if mark-active (progn (delete-region (region-beginning) (region-end)) (yank (or arg 1)) (setq mark-active nil)) (yank (or arg 1))))
上2つは, 範囲選択していたならば, その範囲を削除する.
一番下のは, 範囲選択していたならば, その選択範囲を削除し, そこにkill-ringの内容を貼り付ける.
これもどっかにありそうだな・・・.