anchor.diff:    (minibuf-window nil)
     (minibuffer-calls-window nil)
     (minibuffer-start-charpos nil))
  -
  -(defun add-frame (frame)
  -  (setf *frame-list* (append *frame-list* (list frame))))
  -
  -(defun remove-frame (id)
  -  (let ((target-frame (find id *frame-list* :key #'frame-id)))
  -    (when target-frame
  -      (progn
  -        (setf *frame-list* (remove id *frame-list* :key #'frame-id))
  -        (frame-window-tree target-frame)))))
   
   (defun map-frame (key frame)
     (setf (gethash key *frame-display-map*) frame))
  
positive.code: (in-package :lem)
  
  (defparameter *frame-count* 0)
  (defparameter *frame-list* '())  ;; TODO: change to defvar when ends testing
  (defparameter *frame-display-map* (make-hash-table))
  
  (defstruct frame
    id
    ;; window
    current-window
    (window-tree nil)
  
negative.code:     (remhash key)
      frame))
  
  (defun setup-frame (frame)
    (setup-minibuffer frame)
    (setup-windows frame))
  
  (defun teardown-frame (frame)
    (teardown-windows frame)
    ;; (teardown-minibuffer frame) ; minibufferをfloating-windowとして扱うので開放処理はしない
  )
  
  (defun teardown-frames ()
    (maphash (lambda (k v)
               (declare (ignore k))
               (teardown-frame v))
             *frame-display-map*))
  
  (defun redraw-frame (frame)
    (redraw-display* frame))
  