そのほかxyzzyで追加したもの

interactive "r"を補助するマクロ

(defmacro sort-beg-end (beg end)
  `(when (> ,beg ,end)
    (let ((tmp ,beg))
      (setf ,beg ,end)
      (setf ,end tmp))))

一番近くの関数を実行

(defun eval-last-defun () (interactive)
  (save-excursion    (end-of-defun) 
    (call-interactively #'eval-last-sexp)))

(global-set-key '(#\C-c #\C-e) 'eval-last-defun)

コメント/アンコメントの関数も作り直した

まだ、動きが妖しい。

;;Comment-region
(defvar *comment-symbols* ";"
  "自分で作ったcomment-regionのための変数。
言語ごとのコメントのコメントがあればそれを使ったほうがいいのだけれど"
  )

(defmacro do-action-region2 (name reg action)
  `(defun ,name (beg end) (interactive "r")
     (sort-beg-end beg end)
     (save-excursion     
       (let ((end (progn (goto-char end) (previous-line) (point))))
       (goto-char beg)
	   (while (scan-buffer ,reg :regexp t :no-dup nil :tail t :limit end)
	     ,@action)))))

  
(let ((s *comment-symbols*))
  (do-action-region2 comment-region
		     "^.+$"
		     ((replace-match (concat s s " " (match-string 0))))))

(do-action-region2 uncomment-region
		   (concat "\\(^[ \t]*\\)\\(\\" *comment-symbols*  "+\\)")
		   ((replace-match "\\1")))