Differences From
Artifact [dd4c4f4886]:
51 51 :type 'boolean)
52 52
53 53 (defface sbbs--spoiler-face
54 54 '((((background light)) :background "black" :foreground "black")
55 55 (((background dark)) :background "white" :foreground "white"))
56 56 "Face for spoiler text in threads.")
57 57
58 +(defface sbbs--uncover-spoiler-face
59 + '((((background light)) :background "black" :foreground "white")
60 + (((background dark)) :background "white" :foreground "black"))
61 + "Face for spoiler text in threads.")
62 +
58 63 (defface sbbs--code-face
59 64 '((((background light)) :background "gray89")
60 65 (((background dark)) :background "gray11"))
61 66 "Face for code blocks in threads.")
62 67
63 68 ;; VARIABLES
64 69
................................................................................
70 75 (defvar-local sbbs--thread-id nil
71 76 "Buffer local reference to current thread id.
72 77
73 78 Used in thread and reply buffers.")
74 79
75 80 (defvar-local sbbs--limit-stack nil
76 81 "Stack of last limit specs.")
82 +
83 +(defvar-local sbbs--last-spoiler nil
84 + "Point of last spoiler visited.")
77 85
78 86 ;; BOARD OBJECT AND FUNCTIONS
79 87
80 88 (defun sbbs-make-board (domain name &optional tls)
81 89 "Create board object, using DOMAIN, NAME and TLS flag."
82 90 (vector domain name tls))
83 91
................................................................................
307 315 (insert " (VIP)"))
308 316 (newline 2)
309 317 (add-text-properties start (1- (point)) '(face highlight))
310 318 (set-text-properties (1- (point)) (point) nil)
311 319 (sbbs--insert-sxml (cdr (assq 'content (cdr post))))
312 320 (add-text-properties start (point) (list 'sbbs-thread-nr (car post)))))
313 321
322 +(defun sbbs--uncover-spoiler ()
323 + ""
324 + (cond ((eq (get-text-property (point) 'face) 'sbbs--spoiler-face)
325 + (let* ((start (previous-property-change (1+ (point))))
326 + (end (next-property-change (point)))
327 + (o (make-overlay start end (current-buffer) t t)))
328 + (overlay-put o 'face 'sbbs--uncover-spoiler-face)
329 + (overlay-put o 'sbbs-uncover-p t))
330 + (setq sbbs--last-spoiler (point)))
331 + (sbbs--last-spoiler
332 + (dolist (o (overlays-at sbbs--last-spoiler))
333 + (when (overlay-get o 'sbbs-uncover-p)
334 + (delete-overlay o)))
335 + (setq sbbs--last-spoiler nil))))
336 +
314 337 ;; URL.EL CALLBACKS
315 338
316 339 (defun sbbs--board-loader (status buf)
317 340 "Callback function for `url-retrieve' when loading board.
318 341
319 342 Load results into buffer BUF. STATUS is used to check for
320 343 errors."
................................................................................
572 595 (define-key map (kbd "f") #'sbbs-show-replies)
573 596 map))
574 597
575 598 (define-derived-mode sbbs-read-mode special-mode "SchemeBBS Read"
576 599 "Major mode for reading a thread."
577 600 (buffer-disable-undo)
578 601 (visual-line-mode t)
579 - (setq-local revert-buffer-function #'sbbs--reload-thread))
602 + (setq-local revert-buffer-function #'sbbs--reload-thread)
603 + (add-hook 'post-command-hook #'sbbs--uncover-spoiler
604 + nil t))
580 605
581 606 (defvar sbbs-compose-mode-map
582 607 (let ((map (make-sparse-keymap)))
583 608 (define-key map (kbd "C-c C-c") #'sbbs-compose-create)
584 609 map))
585 610
586 611 (defvar sbbs--font-lock