+;; More subtly, we make only the cdrs of this list shared among
+;; all text of a given context, allowing the cars to be different
+;; and for different elements of the context-specific text to have
+;; different styling.
+
+;; Additionally, we can allow selective hiding of contexts via
+;; the buffer-invisibility-spec.
+
+(defvar lurk-context-facelists (make-hash-table :test 'equal)
+ "List of seen contexts and associated face lists.")
+
+(defun lurk-get-context-facelist (context)
+ (let ((facelist (gethash context lurk-context-facelists)))
+ (unless facelist
+ (setq facelist (list 'lurk-text))
+ (puthash context facelist lurk-context-facelists))
+ facelist))
+
+(defun lurk-display-string (context &rest strings)
+ (with-current-buffer (get-buffer-create "*lurk*")
+ (save-excursion
+ (goto-char lurk-prompt-marker)
+ (let ((inhibit-read-only t)
+ (old-pos (marker-position lurk-prompt-marker))
+ (adaptive-fill-regexp (rx (= 6 anychar)))
+ (fill-column 80)
+ (context-atom (if context (intern context) nil)))
+ (insert-before-markers
+ (propertize (concat (format-time-string "%H:%M") " ")
+ 'face (lurk-get-context-facelist context)
+ 'read-only t
+ 'context context
+ 'invisible context-atom
+ 'help-echo (concat "Context: " (or context "none")))
+ (propertize (concat (apply #'concat strings) "\n")
+ 'face (lurk-get-context-facelist context)
+ 'read-only t
+ 'context context
+ 'invisible context-atom
+ 'help-echo (concat "Context: " (or context "none"))))
+ (fill-region old-pos lurk-prompt-marker nil t)))))