コード書き中(2)

(defmacro polyedit-set-toggle-key (toggle-key &rest args)
  (let* ((docp (stringp (car args)))
         (doc (if docp (car args) '((interactive))))
         (ar (if docp (cdr args) args)))
    `(let ((func (gentemp "polyedit-toggle-mover")))
       (si:*fset func
                 (si:*set-function-name
                  #'(lambda ()
                      (interactive)
                      (series 2 (define-key #1=*polyedit-mode-map*)
                        ,@ar))
                  func))
       ,(if docp `(si:*putprop func ,doc 'lisp::function-documentation))
       (define-key #1# ,toggle-key func)
       (setq #2=polyedit-toggle-alist
             (append '((,toggle-key func ,(if docp (car args))))
                     (delete ,toggle-key #2# :key #'car))))))

昨日書いたものの動作がいまいちだったので書き直した。
昨日のものだと、バイトコンパイルしたときに関数名が読み込めなくなる。
また、折角シンボル名を生成したのに、書き下してしまうと名前が衝突する可能性がある。
というところを直した。
まあ、バイトコンパイルするとすごく容量が増えるけど、動けばいいだろう。動けば。