anchor.diff:                               :width (display-width)
                                :height (display-height)
                                :id/frame-table id/frame-table
  -                             :current %frame
  -                             :buffer-list-map (make-hash-table))))
  +                             :current %frame)))
         vf)))
  -
  -(defun all-buffer-list ()
  -  (remove-duplicates
  -   (loop
  -     :for k :being :each :hash-key :of *virtual-frame-map*
  -     :using (hash-value vf)
  -     :append (loop
  -               :for k :being :each :hash-key :of (virtual-frame-buffer-list-map vf)
  -               :using (hash-value buffer-list)
  -               :append buffer-list))))
   
   (defun find-unused-frame-id (virtual-frame)
     (position-if #'null (virtual-frame-id/frame-table virtual-frame)))
  
positive.code:   (setf (variable-value 'frame-multiplexer :global)
          (not (variable-value 'frame-multiplexer :global))))
  
  (defun create-frame (new-buffer-list-p)
    (check-frame-multiplexer-enabled)
    (let* ((vf (gethash (implementation) *virtual-frame-map*))
           (id (find-unused-frame-id vf)))
      (when (null id)
        (editor-error "it's full of frames in virtual frame"))
      (set-to-frame-buffer-list vf (virtual-frame-current vf))
      (let* ((frame (lem:make-frame))
             (%frame (%make-frame id frame)))
        (lem:setup-frame frame)
        ;;create new-window with *tmp* buffer by default
        (let* ((tmp-buffer (find "*tmp*" (append (buffer-list) (all-buffer-list))
                                 :key (lambda (b) (buffer-name b))
                                 :test #'string=))
               (buffer-list (if new-buffer-list-p
                                (list tmp-buffer)
                                (copy-list (buffer-list)))))
          ;; set buffer-list to virtual frame and global buffer-list
          (setf (gethash %frame (virtual-frame-buffer-list-map vf)) buffer-list)
          (lem-base::set-buffer-list buffer-list)
          ;; create window and set to frame
          (when tmp-buffer
            (push vf (lem:frame-header-windows frame))
            (let ((new-window (lem::make-window tmp-buffer
                                                (lem::window-topleft-x) (lem::window-topleft-y)
                                                (lem::window-max-width) (lem::window-max-height)
                                                t)))
              (setf (lem:frame-window-tree frame) new-window
                    (lem:frame-current-window frame) new-window
                    (virtual-frame-current vf) %frame)
              ;; expose frame
              (allocate-frame vf %frame)
              (lem:map-frame (implementation) frame))))
        ;; new window should be redraw
        (setf (virtual-frame-changed vf) t))))
  
  (define-key *global-keymap* "C-z c" 'fm-create-with-new-buffer-list)
  (define-command fm-create-with-new-buffer-list () ()
    (create-frame t))
  
  (define-key *global-keymap* "C-z C" 'fm-create)
  (define-command fm-create () ()
    (create-frame nil))
  
  (define-key *global-keymap* "C-z d" 'fm-delete)
  (define-command fm-delete () ()
  
negative.code: (define-key *global-keymap* "C-z p" 'fm-prev)
  (define-command fm-prev () ()
    (check-frame-multiplexer-enabled)
    (let* ((vf (gethash (implementation) *virtual-frame-map*))
           (%frame (search-previous-frame vf (virtual-frame-current vf))))
      (when %frame
        (setf (virtual-frame-current vf) %frame)
        (lem:map-frame (implementation) (%frame-frame %frame)))
      (lem::change-display-size-hook)
      (setf (virtual-frame-changed vf) t)))
  
  (define-key *global-keymap* "C-z n" 'fm-next)
  (define-command fm-next () ()
    (check-frame-multiplexer-enabled)
    (let* ((vf (gethash (implementation) *virtual-frame-map*))
           (%frame (search-next-frame vf (virtual-frame-current vf))))
      (when %frame
        (setf (virtual-frame-current vf) %frame)
        (lem:map-frame (implementation) (%frame-frame %frame)))
      (lem::change-display-size-hook)
      (setf (virtual-frame-changed vf) t)))
  
  (define-command fm-test () ()
    (labels ((vf ()
  