(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"))) (load-file "roman-numerals/roman-numerals.el") (kj-display "Roman numerals" (to-roman 1990)) (load-file "hamming/hamming.el") (kj-display "Hamming distance" (hamming-distance "GGACGGATTCTG" "AGGACGGATTCT")) (load-file "rna-transcription/rna-transcription.el") (kj-display "RNA transcription" (to-rna "GGACGGATTCTG")) (provide 'hello)