]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't use a hashtable in gnus-backlog scratch/gnus-hashtables
authorEric Abrahamsen <eric@ericabrahamsen.net>
Mon, 4 Feb 2019 20:55:29 +0000 (12:55 -0800)
committerEric Abrahamsen <eric@ericabrahamsen.net>
Mon, 4 Feb 2019 21:37:50 +0000 (13:37 -0800)
* lisp/gnus/gnus-bcklg.el (gnus-backlog-articles): Remove
  gnus-backlog-hashtb, which wasn't doing anything. Just keep a list
  of ident strings in gnus-backlog-articles.
  (gnus-backlog-setup): Delete unnecessary function.
  (gnus-backlog-enter-article, gnus-backlog-remove-oldest-article,
  gnus-backlog-remove-article, gnus-backlog-request-article): Alter
  calls accordingly.

lisp/gnus/gnus-bcklg.el

index 77f1f2a1220eebf2e7447a04112366fbccdab1f6..17513c5a8af152b250b2a79a24a81571d3f9c004 100644 (file)
 
 ;;; Commentary:
 
+;; The backlog caches the text of a certain number of read articles in
+;; a separate buffer, so they can be retrieved quickly if the user
+;; opens them again.  Also see `gnus-keep-backlog'.
+
 ;;; Code:
 
 (require 'gnus)
 
-;;;
-;;; Buffering of read articles.
-;;;
-
 (defvar gnus-backlog-buffer " *Gnus Backlog*")
-(defvar gnus-backlog-hashtb nil)
+(defvar gnus-backlog-articles '())
 
 (defun gnus-backlog-buffer ()
   "Return the backlog buffer."
        (setq buffer-read-only t)
        (get-buffer gnus-backlog-buffer))))
 
-(defun gnus-backlog-setup ()
-  "Initialize backlog variables."
-  (unless gnus-backlog-hashtb
-    (setq gnus-backlog-hashtb (gnus-make-hashtable 1000))))
-
 (gnus-add-shutdown 'gnus-backlog-shutdown 'gnus)
 
 (defun gnus-backlog-shutdown ()
   (interactive)
   (when (get-buffer gnus-backlog-buffer)
     (gnus-kill-buffer gnus-backlog-buffer))
-  (setq gnus-backlog-hashtb nil))
+  (setq gnus-backlog-articles nil))
 
 (defun gnus-backlog-enter-article (group number buffer)
   (when (and (numberp number)
             (not (gnus-virtual-group-p group)))
-    (gnus-backlog-setup)
-    (let ((ident (concat group ":" (int-to-string number)))
+    (let ((ident (format "%s:%d" group number))
          b)
-     (unless (gethash ident gnus-backlog-hashtb) ; It's already kept.
+     (unless (member ident gnus-backlog-articles) ; It's already kept.
        ;; Remove the oldest article, if necessary.
        (and (numberp gnus-keep-backlog)
-           (>= (hash-table-count gnus-backlog-hashtb) gnus-keep-backlog)
+           (>= (length gnus-backlog-articles) gnus-keep-backlog)
            (gnus-backlog-remove-oldest-article))
-       (puthash ident t gnus-backlog-hashtb)
+       (push ident gnus-backlog-articles)
        ;; Insert the new article.
        (with-current-buffer (gnus-backlog-buffer)
         (let (buffer-read-only)
@@ -88,7 +82,8 @@
            buffer-read-only)
        ;; Remove the ident from the list of articles.
        (when ident
-         (remhash ident gnus-backlog-hashtb))
+         (setq gnus-backlog-articles
+               (delete ident gnus-backlog-articles)))
        ;; Delete the article itself.
        (delete-region
         (point) (next-single-property-change
 (defun gnus-backlog-remove-article (group number)
   "Remove article NUMBER in GROUP from the backlog."
   (when (numberp number)
-    (gnus-backlog-setup)
-    (let ((ident (concat group ":" (int-to-string number)))
+    (let ((ident (format "%s:%d" group number))
          beg)
-      (when (gethash ident gnus-backlog-hashtb)
+      (when (member ident gnus-backlog-articles)
        ;; It was in the backlog.
        (with-current-buffer (gnus-backlog-buffer)
          (save-excursion
              (goto-char (point-min))
              (when (setq beg (gnus-text-property-search
                               'gnus-backlog ident))
-               (setq beg (prop-match-beginning beg))
                ;; Find the end (i. e., the beginning of the next article).
                (goto-char
                 (next-single-property-change
                (delete-region beg (point))
                ;; Return success.
                t)))
-         (remhash ident gnus-backlog-hashtb))))))
+         (setq gnus-backlog-articles
+               (delete ident gnus-backlog-articles)))))))
 
 (defun gnus-backlog-request-article (group number &optional buffer)
   (when (and (numberp number)
             (not (gnus-virtual-group-p group)))
-    (gnus-backlog-setup)
-    (let ((ident (concat group ":" (int-to-string number)))
+    (let ((ident (format "%s:%d" group number))
          beg end)
-      (when (gethash ident gnus-backlog-hashtb)
+      (when (member ident gnus-backlog-articles)
        ;; It was in the backlog.
        (with-current-buffer (gnus-backlog-buffer)
          (if (not (setq beg (gnus-text-property-search
                              'gnus-backlog ident)))
              ;; It wasn't in the backlog after all.
              (ignore
-              (remhash ident gnus-backlog-hashtb))
+              (setq gnus-backlog-articles
+                    (delete ident gnus-backlog-articles)))
            ;; Find the end (i. e., the beginning of the next article).
            (setq end
                  (next-single-property-change