Differences From
Artifact [a4c9b26bff]:
442 442 'utf-8))
443 443
444 444 (defun sbbs--board-loader (status buf)
445 445 "Callback function for `url-retrieve' when loading board.
446 446
447 447 Load results into buffer BUF. STATUS is used to check for
448 448 errors."
449 - (when (buffer-live-p buf)
450 - (when (plist-get status :error)
451 - (error "Error while loading: %s"
452 - (cdr (plist-get status :error))))
453 - (forward-paragraph)
454 - (sbbs--fix-encoding)
455 - (let ((list (read (current-buffer))))
456 - (kill-buffer)
457 - (with-current-buffer buf
458 - (let (ent)
459 - (dolist (thread list)
460 - (push (list (car thread)
461 - (vector (substring (cdr (assq 'date (cdr thread)))
462 - 0 16)
463 - (number-to-string
464 - (cdr (assq 'messages (cdr thread))))
465 - (propertize
466 - (cdr (assq 'headline (cdr thread)))
467 - 'face 'sbbs--variable-pitch)))
468 - ent))
469 - (setq-local tabulated-list-entries ent)
470 - (tabulated-list-print t t)
471 - (hl-line-highlight))))))
449 + (unwind-protect
450 + (when (buffer-live-p buf)
451 + (when (plist-get status :error)
452 + (error "Error while loading: %s"
453 + (cdr (plist-get status :error))))
454 + (forward-paragraph)
455 + (sbbs--fix-encoding)
456 + (let ((list (read (current-buffer))))
457 + (with-current-buffer buf
458 + (let (ent)
459 + (dolist (thread list)
460 + (push (list (car thread)
461 + (vector (substring (cdr (assq 'date (cdr thread)))
462 + 0 16)
463 + (number-to-string
464 + (cdr (assq 'messages (cdr thread))))
465 + (propertize
466 + (cdr (assq 'headline (cdr thread)))
467 + 'face 'sbbs--variable-pitch)))
468 + ent))
469 + (setq-local tabulated-list-entries ent)
470 + (tabulated-list-print t t)
471 + (hl-line-highlight)))))
472 + (kill-buffer)))
472 473
473 474 (defun sbbs--thread-loader (status id buf range)
474 475 "Callback function for `url-retrieve' when loading thread.
475 476
476 477 The attribute ID determines what thread from board BOARD to
477 478 load. STATUS is used to check for errors."
478 - (when (buffer-live-p buf)
479 - (when (plist-get status :error)
480 - (error "Error while loading: %s"
481 - (cdr (plist-get status :error))))
482 - (prog-mode)
483 - (forward-paragraph)
484 - (sbbs--fix-encoding)
485 - (save-excursion
486 - (save-match-data
487 - (while (search-forward "#f" nil t)
488 - (unless (cadddr (syntax-ppss))
489 - (replace-match "nil")))))
490 - (save-excursion
491 - (save-match-data
492 - (while (search-forward "#f" nil t)
493 - (unless (cadddr (syntax-ppss))
494 - (replace-match "t")))))
495 - (let ((thread (read (current-buffer))))
496 - (kill-buffer)
497 - (with-current-buffer buf
498 - (let ((buffer-read-only nil))
499 - (erase-buffer)
500 - (setq header-line-format
501 - (format "Thread %d: %s" id
502 - (cdr (assq 'headline thread))))
503 - (dolist (post (cadr (assq 'posts thread)))
504 - (sbbs--thread-insert-post post))
505 - (delete-blank-lines)
506 - (when range
507 - (sbbs--limit-to-range range))
508 - (if sbbs-open-at-last-post
509 - (sbbs-goto-end)
510 - (goto-char (point-min))))))))
479 + (unwind-protect
480 + (when (buffer-live-p buf)
481 + (when (plist-get status :error)
482 + (error "Error while loading: %s"
483 + (cdr (plist-get status :error))))
484 + (prog-mode)
485 + (forward-paragraph)
486 + (sbbs--fix-encoding)
487 + (save-excursion
488 + (save-match-data
489 + (while (search-forward "#f" nil t)
490 + (unless (cadddr (syntax-ppss))
491 + (replace-match "nil")))))
492 + (save-excursion
493 + (save-match-data
494 + (while (search-forward "#f" nil t)
495 + (unless (cadddr (syntax-ppss))
496 + (replace-match "t")))))
497 + (let ((thread (read (current-buffer))))
498 + (with-current-buffer buf
499 + (let ((buffer-read-only nil))
500 + (erase-buffer)
501 + (setq header-line-format
502 + (format "Thread %d: %s" id
503 + (cdr (assq 'headline thread))))
504 + (dolist (post (cadr (assq 'posts thread)))
505 + (sbbs--thread-insert-post post))
506 + (delete-blank-lines)
507 + (when range
508 + (sbbs--limit-to-range range))
509 + (if sbbs-open-at-last-post
510 + (sbbs-goto-end)
511 + (goto-char (point-min)))))))
512 + (kill-buffer)))
511 513
512 514
513 515 ;;; INTERACTIVE FUNCTIONS
514 516
515 517 (defun sbbs-open-externally ()
516 518 "Open the current thread using `browse-url'."
517 519 (interactive)