(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 experiments" 'face 'org-level-1)))) (defmacro kj-display (title &rest code) `(progn (kj-writeln (propertize (concat "** " ,title) 'face 'org-level-2)) (mapc (lambda (c) (kj-writeln (propertize "Code:" 'face 'italic)) (kj-writeln (format "%S" c)) (kj-writeln (propertize "Output:" 'face 'italic)) (kj-writeln (format "%S" (eval c)))) ',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) (leap-year-p 1900) (leap-year-p 2000)) (load-file "anagram/anagram.el") (kj-display "Anagrams" (anagrams-for "allergy" '("gallery" "ballerina" "regally" "clergy" "largely" "leading"))) (provide 'hello)