(defmacro in-test-window (&rest body) `(save-selected-window (switch-to-buffer-other-window "*kj/test*") ,@body)) (macroexpand '(in-test-window (insert "hello") (insert "world"))) (defun setup-test-window () (in-test-window (erase-buffer))) (defun kj-writeln (msg) (in-test-window (insert (concat msg "\n")))) (setup-test-window) (kj-writeln (in-test-window (insert (propertize "* Emacs tests" 'face 'org-level-1)))) (defmacro kj-display (title &rest code) `(progn (kj-writeln (propertize (concat "** " ,title) 'face 'org-level-2)) (kj-writeln (propertize "Code:" 'face 'italic)) (kj-writeln (format "%s" ',@code)) (kj-writeln (propertize "Output:" 'face 'italic)) (kj-writeln (format "%s" ,@code)))) (load-file "hello-world/hello-world.el") (kj-display "Hello" (hello)) (load-file "two-fer/two-fer.el") (kj-display "Two-fer" (two-fer "Annie")) (load-file "leap/leap.el") (kj-display "* Leap years" (leap-year-p 1996)) (provide 'hello)