-(defun lurk-display-channel-message (from to text)
- (lurk-display-string
- (propertize (concat to
- " <" from "> "
- text)
- 'face 'lurk-text)))
-
-
-(defun lurk-display-action (channel-name nick action)
- (lurk-display-string (concat channel-name
- " * "
- (propertize (concat nick " " action)
- 'face 'lurk-text))))
-
-(defun lurk-display-private-message (from to text)
- (lurk-display-string
- (concat
- (propertize
- (concat "[" from " -> " to "] "
- text)
- 'face 'lurk-text))))
-
+;; 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)))))