矩形やら選択範囲を操作するのは silog さんとこの surround.l が便利なのでそれを使っているのですが何ヶ所か離れた所を同時編集する時に使う為と register って便利だなと思ったので使ってみた。上記の物よりはコードが短くすんだので満足した。
(defvar *multi-register-r* 0)
(defun multi-set-register ()
(interactive)
(mouse-left-press)
(setq *multi-register-r* (1+ *multi-register-r*))
(ed::set-register (code-char *multi-register-r*)(point-marker)))
(defun multi-type-register()
(interactive)
(let(c)
(while(setq c (read-char *standard-input*))
(if(eq #\C-h c)
(do((i 1 (1+ i)))
((> i *multi-register-r*)nil)
(jump-to-register (code-char i))
(delete-char -1)(refresh-screen))
(progn
(when(and(not(eq #\C-h c))(fboundp (lookup-key-command c))
(not(eq (lookup-key-command c) 'self-insert-command)))
(setq *multi-register-r* 0)(unread-char c)
(return-from multi-type-register))
(do((i 1 (1+ i)))
((> i *multi-register-r*)nil)
(jump-to-register (code-char i))
(insert c)
(ed::set-register (code-char i)(point-marker))
(refresh-screen)
))))))
;とりあえずマウスで指定していく
(global-set-key #\C-LBtnDown 'multi-set-register) (global-set-key #\C-RBtnDown 'multi-type-register)