fix: render canonical Ebox inputs in Playground

This commit is contained in:
Kinneyzhang 2026-08-28 16:48:33 +08:00
parent 81957acdf3
commit 2e9a303424
2 changed files with 20 additions and 16 deletions

View File

@ -158,8 +158,10 @@ CANVAS-BACKGROUND fills display space outside generated root lines."
(set (make-local-variable variable) value) (set (make-local-variable variable) value)
(kill-local-variable variable))))) (kill-local-variable variable)))))
(defun ebox-playground--render-to-preview-buffer (buffer node) (defun ebox-playground--render-to-preview-buffer (buffer input)
"Render NODE into BUFFER with transactional preview display settings." "Render canonical INPUT into BUFFER with transactional display settings."
(unless (ebox-canonical-input-p input)
(signal 'wrong-type-argument (list 'ebox-canonical-input-p input)))
(with-current-buffer (get-buffer-create buffer) (with-current-buffer (get-buffer-create buffer)
(let ((snapshot (ebox-playground--preview-display-snapshot)) (let ((snapshot (ebox-playground--preview-display-snapshot))
(published-p nil)) (published-p nil))
@ -167,21 +169,20 @@ CANVAS-BACKGROUND fills display space outside generated root lines."
(prog1 (prog1
(progn (progn
(ebox-playground--apply-preview-display-settings (ebox-playground--apply-preview-display-settings
(and (consp node)
(ebox-style-node-specified-value (ebox-style-node-specified-value
node :background-color))) input :background-color))
(ebox-render-to-buffer buffer node)) (ebox-render-to-buffer buffer input))
(setq published-p t)) (setq published-p t))
(unless published-p (unless published-p
(ebox-playground--restore-preview-display-snapshot snapshot)))))) (ebox-playground--restore-preview-display-snapshot snapshot))))))
(defun ebox-playground--render-node-to-buffer (buffer node viewport-width) (defun ebox-playground--render-input-to-buffer (buffer input viewport-width)
"Render NODE into BUFFER using VIEWPORT-WIDTH. "Render canonical INPUT into BUFFER using VIEWPORT-WIDTH.
Visible mounted buffers follow their window through Ebox's viewport controller." Visible mounted buffers follow their window through Ebox's viewport controller."
(let ((ebox-viewport-width (let ((ebox-viewport-width
(or viewport-width (or viewport-width
(ebox-playground--effective-viewport-width)))) (ebox-playground--effective-viewport-width))))
(ebox-playground--render-to-preview-buffer buffer node))) (ebox-playground--render-to-preview-buffer buffer input)))
(defun ebox-playground--static-value-p (value) (defun ebox-playground--static-value-p (value)
"Return non-nil when VALUE is a literal or explicitly quoted form." "Return non-nil when VALUE is a literal or explicitly quoted form."
@ -256,7 +257,7 @@ Visible mounted buffers follow their window through Ebox's viewport controller."
"Render the default Ebox DSL example into BUFFER-NAME and return its buffer." "Render the default Ebox DSL example into BUFFER-NAME and return its buffer."
(interactive) (interactive)
(let ((viewport-width (ebox-playground--effective-viewport-width))) (let ((viewport-width (ebox-playground--effective-viewport-width)))
(ebox-playground--render-node-to-buffer (ebox-playground--render-input-to-buffer
(or buffer-name ebox-playground-buffer-name) (or buffer-name ebox-playground-buffer-name)
(ebox-playground-view nil viewport-width) (ebox-playground-view nil viewport-width)
viewport-width))) viewport-width)))
@ -266,7 +267,7 @@ Visible mounted buffers follow their window through Ebox's viewport controller."
"Render Ebox DSL FILE into BUFFER-NAME and return its buffer." "Render Ebox DSL FILE into BUFFER-NAME and return its buffer."
(interactive "fEbox DSL file: ") (interactive "fEbox DSL file: ")
(let ((viewport-width (ebox-playground--effective-viewport-width))) (let ((viewport-width (ebox-playground--effective-viewport-width)))
(ebox-playground--render-node-to-buffer (ebox-playground--render-input-to-buffer
(or buffer-name (or buffer-name
(format "*Ebox Preview: %s*" (file-name-nondirectory file))) (format "*Ebox Preview: %s*" (file-name-nondirectory file)))
(ebox-playground-view file viewport-width) (ebox-playground-view file viewport-width)

View File

@ -432,7 +432,8 @@
(let ((preview " *ebox-playground-preview-settings-test*")) (let ((preview " *ebox-playground-preview-settings-test*"))
(unwind-protect (unwind-protect
(progn (progn
(ebox-playground--render-node-to-buffer preview "preview" 240) (ebox-playground--render-input-to-buffer
preview (ebox-build '(box "preview")) 240)
(with-current-buffer preview (with-current-buffer preview
(should truncate-lines) (should truncate-lines)
(should-not (assq 'truncation fringe-indicator-alist)) (should-not (assq 'truncation fringe-indicator-alist))
@ -471,7 +472,7 @@
ebox-playground-directory))) ebox-playground-directory)))
(unwind-protect (unwind-protect
(progn (progn
(ebox-playground--render-node-to-buffer (ebox-playground--render-input-to-buffer
preview (ebox-playground-view path 720) 720) preview (ebox-playground-view path 720) 720)
(with-current-buffer preview (with-current-buffer preview
(should (equal face-remapping-alist (should (equal face-remapping-alist
@ -580,9 +581,11 @@
(ert-deftest ebox-playground-fits-a-compact-gui-window () (ert-deftest ebox-playground-fits-a-compact-gui-window ()
"Keep the gallery wide enough to teach Grid without crossing 800 px frames." "Keep the gallery wide enough to teach Grid without crossing 800 px frames."
(let* ((node (ebox-playground-view)) (let* ((input (ebox-playground-view))
(gallery-width (plist-get (car (plist-get node :children)) :width)) (root (car (ebox-canonical-input-roots input)))
(rendered (ebox-render node)) (gallery-width
(plist-get (car (ebox-box-node-children root)) :width))
(rendered (ebox-render input))
(widths (mapcar #'ebox-string-pixel-width (widths (mapcar #'ebox-string-pixel-width
(ebox-string-lines rendered))) (ebox-string-lines rendered)))
(maximum (apply #'max widths))) (maximum (apply #'max widths)))