comment-regionとかを修正

コメントをもらったので、その内容をもとに前に作ったcomment-regionなどを修正しました。

  • scan-bufferよりreplace-bufferを使ったほうが楽
  • 範囲を限定するときはsave-restrictionを使ってからnarrow-to-regionを使う。

コード

;;重複を省くためのマクロ
(defmacro do-action-region3 (name pattern replacement)
  `(defun ,name (beg end) (interactive "r")
     (when (> beg end) (rotatef beg end))
     (save-excursion
       (goto-char beg)
       (save-restriction
	 (narrow-to-region beg end)
	 (replace-buffer ,pattern ,replacement :regexp t)))))

;;comment-region
(let* ((s *comment-symbols*) 
        (word (concat s s " \\0")))
   (do-action-region3 comment-region "^.+\$" word))

;;uncomment-region
(do-action-region3 uncomment-region
		   (concat "^\\([ \t]*\\)" *comment-symbols*  "+")
		   "\\1")