From 2e9a3034242914764b85990232e6c4663fc278b1 Mon Sep 17 00:00:00 2001 From: Kinneyzhang Date: Fri, 28 Aug 2026 16:48:33 +0800 Subject: [PATCH] fix: render canonical Ebox inputs in Playground --- ebox-playground.el | 23 ++++++++++++----------- tests/ebox-playground-tests.el | 13 ++++++++----- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/ebox-playground.el b/ebox-playground.el index df2fc4b..3650268 100644 --- a/ebox-playground.el +++ b/ebox-playground.el @@ -158,8 +158,10 @@ CANVAS-BACKGROUND fills display space outside generated root lines." (set (make-local-variable variable) value) (kill-local-variable variable))))) -(defun ebox-playground--render-to-preview-buffer (buffer node) - "Render NODE into BUFFER with transactional preview display settings." +(defun ebox-playground--render-to-preview-buffer (buffer input) + "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) (let ((snapshot (ebox-playground--preview-display-snapshot)) (published-p nil)) @@ -167,21 +169,20 @@ CANVAS-BACKGROUND fills display space outside generated root lines." (prog1 (progn (ebox-playground--apply-preview-display-settings - (and (consp node) - (ebox-style-node-specified-value - node :background-color))) - (ebox-render-to-buffer buffer node)) + (ebox-style-node-specified-value + input :background-color)) + (ebox-render-to-buffer buffer input)) (setq published-p t)) (unless published-p (ebox-playground--restore-preview-display-snapshot snapshot)))))) -(defun ebox-playground--render-node-to-buffer (buffer node viewport-width) - "Render NODE into BUFFER using VIEWPORT-WIDTH. +(defun ebox-playground--render-input-to-buffer (buffer input viewport-width) + "Render canonical INPUT into BUFFER using VIEWPORT-WIDTH. Visible mounted buffers follow their window through Ebox's viewport controller." (let ((ebox-viewport-width (or 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) "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." (interactive) (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) (ebox-playground-view nil 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." (interactive "fEbox DSL file: ") (let ((viewport-width (ebox-playground--effective-viewport-width))) - (ebox-playground--render-node-to-buffer + (ebox-playground--render-input-to-buffer (or buffer-name (format "*Ebox Preview: %s*" (file-name-nondirectory file))) (ebox-playground-view file viewport-width) diff --git a/tests/ebox-playground-tests.el b/tests/ebox-playground-tests.el index da0743b..e825ce9 100644 --- a/tests/ebox-playground-tests.el +++ b/tests/ebox-playground-tests.el @@ -432,7 +432,8 @@ (let ((preview " *ebox-playground-preview-settings-test*")) (unwind-protect (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 (should truncate-lines) (should-not (assq 'truncation fringe-indicator-alist)) @@ -471,7 +472,7 @@ ebox-playground-directory))) (unwind-protect (progn - (ebox-playground--render-node-to-buffer + (ebox-playground--render-input-to-buffer preview (ebox-playground-view path 720) 720) (with-current-buffer preview (should (equal face-remapping-alist @@ -580,9 +581,11 @@ (ert-deftest ebox-playground-fits-a-compact-gui-window () "Keep the gallery wide enough to teach Grid without crossing 800 px frames." - (let* ((node (ebox-playground-view)) - (gallery-width (plist-get (car (plist-get node :children)) :width)) - (rendered (ebox-render node)) + (let* ((input (ebox-playground-view)) + (root (car (ebox-canonical-input-roots input))) + (gallery-width + (plist-get (car (ebox-box-node-children root)) :width)) + (rendered (ebox-render input)) (widths (mapcar #'ebox-string-pixel-width (ebox-string-lines rendered))) (maximum (apply #'max widths)))