Subject: Re: Gnus spelling fix: unexist -> nonexistent

From: Paul Eggert <[email-masked]>
Date: Sat, 06 Jul 2013 15:17:31 -0700

On 07/06/2013 08:36 AM, Lars Ingebrigtsen wrote:
> `unexist' has been in use for a couple of years, so this would break
> people's Gnus files.

Sorry, I thought 'unexist' was a more recent edition.  In that case,
how about if gnus-clean-old-newsrc automatically updates the old Gnus
files from 'unexist' to 'nonexistent'?  The code already does that for
the old bad seplling 'unexists', so there's precedent for fixing
spelling in this area.

> it's probably "non-existent" or "unexisting".

Those are both English words, but "unexisting" is rare nowadays
(almost obsolete), and "unexist" itself is not English.  The GNU Emacs
trunk uses "nonexistent" in about 240 places, "non-existent" in about
120 places (this is more the British style, but whatever), and
"unexisting" in zero places until the recent addition.  There is some
advantage to sticking with the more-common usage.

Revised patch follows.

=== modified file 'lisp/gnus/ChangeLog'
--- lisp/gnus/ChangeLog	2013-07-06 12:49:38 +0000
+++ lisp/gnus/ChangeLog	2013-07-06 22:07:33 +0000
@@ -1,3 +1,21 @@
+2013-07-06  Paul Eggert  <[email-masked]>
+
+	Spelling fix: unexist -> nonexistent (Bug#14804).
+	* gnus-group.el (gnus-group-expire-articles-1):
+	* gnus-start.el (gnus-clean-old-newsrc):
+	* gnus-sum.el (gnus-articles-to-read, gnus-adjust-marked-articles)
+	(gnus-update-marks, gnus-summary-expire-articles)
+	(gnus-summary-insert-old-articles):
+	* gnus.el (gnus-article-mark-lists, gnus-article-special-mark-lists)
+	(gnus-article-unpropagated-mark-lists):
+	* nnimap.el (nnimap-retrieve-group-data-early, nnimap-update-info)
+	(nnimap-update-qresync-info):
+	Use 'nonexistent', not 'unexist', to for marks of nonexistent articles.
+	* gnus-start.el (gnus-clean-old-newsrc): Migrate old-spelling
+	'unexist' marks to the new spelling 'nonexistent'.
+	* gnus-sum.el (gnus-newsgroup-nonexistent):
+	Rename from gnus-newsgroup-unexist.  All uses changed.
+
 2013-07-05  David Kastrup  <[email-masked]>
 
 	* auth-source.el (auth-source-netrc-parse-one): Allow empty strings in

=== modified file 'lisp/gnus/gnus-group.el'
--- lisp/gnus/gnus-group.el	2013-07-02 10:38:58 +0000
+++ lisp/gnus/gnus-group.el	2013-07-06 09:36:51 +0000
@@ -3657,7 +3657,7 @@
 	   (articles-to-expire
 	    (gnus-list-range-difference
 	     (gnus-uncompress-sequence (cdr expirable))
-	     (cdr (assq 'unexist (gnus-info-marks info)))))
+	     (cdr (assq 'nonexistent (gnus-info-marks info)))))
 	   (expiry-wait (gnus-group-find-parameter group 'expiry-wait))
 	   (nnmail-expiry-target
 	    (or (gnus-group-find-parameter group 'expiry-target)

=== modified file 'lisp/gnus/gnus-start.el'
--- lisp/gnus/gnus-start.el	2013-07-02 10:38:58 +0000
+++ lisp/gnus/gnus-start.el	2013-07-06 22:07:33 +0000
@@ -2306,10 +2306,11 @@
 
 (defun gnus-clean-old-newsrc (&optional force)
   (when gnus-newsrc-file-version
-    ;; Remove totally bogus `unexists' entries.  The name is
-    ;; `unexist'.
+    ;; Remove totally bogus `unexist' and `unexists' entries.  The name is
+    ;; `nonexistent'.
     (dolist (info (cdr gnus-newsrc-alist))
-      (let ((exist (assoc 'unexists (gnus-info-marks info))))
+      (let ((exist (or (assoc 'unexist (gnus-info-marks info))
+		       (assoc 'unexists (gnus-info-marks info)))))
 	(when exist
 	  (gnus-info-set-marks
 	   info (delete exist (gnus-info-marks info))))))
@@ -2318,7 +2319,7 @@
 		 (gnus-continuum-version "Ma Gnus v0.03")))
       ;; Remove old `exist' marks from old nnimap groups.
       (dolist (info (cdr gnus-newsrc-alist))
-	(let ((exist (assoc 'unexist (gnus-info-marks info))))
+	(let ((exist (assoc 'nonexistent (gnus-info-marks info))))
 	  (when exist
 	    (gnus-info-set-marks
 	     info (delete exist (gnus-info-marks info)))))))))

=== modified file 'lisp/gnus/gnus-sum.el'
--- lisp/gnus/gnus-sum.el	2013-07-03 04:15:38 +0000
+++ lisp/gnus/gnus-sum.el	2013-07-06 09:36:51 +0000
@@ -1524,8 +1524,8 @@
 (defvar gnus-newsgroup-seen nil
   "Range of seen articles in the current newsgroup.")
 
-(defvar gnus-newsgroup-unexist nil
-  "Range of unexistent articles in the current newsgroup.")
+(defvar gnus-newsgroup-nonexistent nil
+  "Range of nonexistent articles in the current newsgroup.")
 
 (defvar gnus-newsgroup-articles nil
   "List of articles in the current newsgroup.")
@@ -1574,7 +1574,7 @@
     gnus-newsgroup-killed
     gnus-newsgroup-unseen
     gnus-newsgroup-seen
-    gnus-newsgroup-unexist
+    gnus-newsgroup-nonexistent
     gnus-newsgroup-cached
     gnus-newsgroup-downloadable
     gnus-newsgroup-undownloaded
@@ -5822,7 +5822,7 @@
 	    (gnus-sorted-nunion
 	     (gnus-sorted-union gnus-newsgroup-dormant gnus-newsgroup-marked)
 	     gnus-newsgroup-unreads))
-	  (cdr (assq 'unexist (gnus-info-marks (gnus-get-info group))))))
+	  (cdr (assq 'nonexistent (gnus-info-marks (gnus-get-info group))))))
 	 (scored-list (gnus-killed-articles gnus-newsgroup-killed articles))
 	 (scored (length scored-list))
 	 (number (length articles))
@@ -5993,7 +5993,7 @@
 			       (> min (car articles)))))
 	    (pop articles))
 	  (set var articles))
-	 ((eq mark 'unexist)
+	 ((eq mark 'nonexistent)
 	  (set var (cdr marks)))))))))
 
 (defun gnus-update-missing-marks (missing)
@@ -6071,7 +6071,7 @@
 	      (push (list del 'del (list (cdr type))) delta-marks))))
 
 	(when (or list
-		  (eq (cdr type) 'unexist))
+		  (eq (cdr type) 'nonexistent))
 	  (push (cons (cdr type) list) newmarked)))
 
       (when delta-marks
@@ -10327,7 +10327,7 @@
 		   (gnus-list-of-read-articles gnus-newsgroup-name))
 	       (setq gnus-newsgroup-expirable
 		     (sort gnus-newsgroup-expirable '<)))
-	     gnus-newsgroup-unexist))
+	     gnus-newsgroup-nonexistent))
 	   (expiry-wait (if now 'immediate
 			  (gnus-group-find-parameter
 			   gnus-newsgroup-name 'expiry-wait)))
@@ -12862,7 +12862,7 @@
 	      ;; Use a compressed range to avoid creating a huge list.
 	      (gnus-range-difference
 	       (gnus-range-difference (list gnus-newsgroup-active) old)
-	       gnus-newsgroup-unexist))
+	       gnus-newsgroup-nonexistent))
 	(setq len (gnus-range-length older))
 	(cond
 	 ((null older) nil)

=== modified file 'lisp/gnus/gnus.el'
--- lisp/gnus/gnus.el	2013-07-02 10:38:58 +0000
+++ lisp/gnus/gnus.el	2013-07-06 09:36:51 +0000
@@ -2636,11 +2636,11 @@
     (scored . score) (saved . save)
     (cached . cache) (downloadable . download)
     (unsendable . unsend) (forwarded . forward)
-    (seen . seen) (unexist . unexist)))
+    (seen . seen) (nonexistent . nonexistent)))
 
 (defconst gnus-article-special-mark-lists
   '((seen range)
-    (unexist range)
+    (nonexistent range)
     (killed range)
     (bookmark tuple)
     (uid tuple)
@@ -2655,7 +2655,7 @@
 ;; `score' is not a proper mark
 ;; `bookmark': don't propagated it, or fix the bug in update-mark.
 (defconst gnus-article-unpropagated-mark-lists
-  '(seen cache download unsend score bookmark unexist)
+  '(seen cache download unsend score bookmark nonexistent)
   "Marks that shouldn't be propagated to back ends.
 Typical marks are those that make no sense in a standalone back end,
 such as a mark that says whether an article is stored in the cache

=== modified file 'lisp/gnus/nnimap.el'
--- lisp/gnus/nnimap.el	2013-07-02 10:38:58 +0000
+++ lisp/gnus/nnimap.el	2013-07-06 09:36:51 +0000
@@ -1288,7 +1288,7 @@
       (setf (nnimap-initial-resync nnimap-object) 0)
       (let ((qresyncp (nnimap-capability "QRESYNC"))
 	    params groups sequences active uidvalidity modseq group
-	    unexist)
+	    nonexistent)
 	;; Go through the infos and gather the data needed to know
 	;; what and how to request the data.
 	(dolist (info infos)
@@ -1296,7 +1296,7 @@
 		group (nnimap-decode-gnus-group
 		       (gnus-group-real-name (gnus-info-group info)))
 		active (cdr (assq 'active params))
-		unexist (assq 'unexist (gnus-info-marks info))
+		nonexistent (assq 'nonexistent (gnus-info-marks info))
 		uidvalidity (cdr (assq 'uidvalidity params))
 		modseq (cdr (assq 'modseq params)))
 	  (setf (nnimap-examined nnimap-object) group)
@@ -1304,7 +1304,7 @@
 		   uidvalidity
 		   active
 		   modseq
-		   unexist)
+		   nonexistent)
 	      (push
 	       (list (nnimap-send-command "EXAMINE %S (%s (%s %s))"
 					  (utf7-encode group t)
@@ -1323,7 +1323,7 @@
 		     ;; is read-only or not.
 		     "SELECT"))
 		  start)
-	      (if (and active uidvalidity unexist)
+	      (if (and active uidvalidity nonexistent)
 		  ;; Fetch the last 100 flags.
 		  (setq start (max 1 (- (cdr active) 100)))
 		(incf (nnimap-initial-resync nnimap-object))
@@ -1506,24 +1506,24 @@
 		    (when new-marks
 		      (push (cons (car type) new-marks) marks)))))
 	      ;; Keep track of non-existing articles.
-	      (let* ((old-unexists (assq 'unexist marks))
+	      (let* ((old-nonexistent (assq 'nonexistent marks))
 		     (active (gnus-active group))
-		     (unexists
+		     (nonexistent
 		      (if completep
 			  (gnus-range-difference
 			   active
 			   (gnus-compress-sequence existing))
 			(gnus-add-to-range
-			 (cdr old-unexists)
+			 (cdr old-nonexistent)
 			 (gnus-list-range-difference
 			  existing (gnus-active group))))))
 		(when (> (car active) 1)
-		  (setq unexists (gnus-range-add
-				  (cons 1 (1- (car active)))
-				  unexists)))
-		(if old-unexists
-		    (setcdr old-unexists unexists)
-		  (push (cons 'unexist unexists) marks)))
+		  (setq nonexistent (gnus-range-add
+				     (cons 1 (1- (car active)))
+				     nonexistent)))
+		(if old-nonexistent
+		    (setcdr old-nonexistent nonexistent)
+		  (push (cons 'nonexistent nonexistent) marks)))
 	      (gnus-info-set-marks info marks t))))
 	;; Tell Gnus whether there are any \Recent messages in any of
 	;; the groups.
@@ -1568,13 +1568,13 @@
 	(when ticks
 	  (push (cons (car type) ticks) marks)))
       (gnus-info-set-marks info marks t))
-    ;; Add vanished to the list of unexisting articles.
+    ;; Add vanished to the list of nonexistent articles.
     (when vanished
-      (let* ((old-unexists (assq 'unexist marks))
-	     (unexists (gnus-range-add (cdr old-unexists) vanished)))
-	(if old-unexists
-	    (setcdr old-unexists unexists)
-	  (push (cons 'unexist unexists) marks)))
+      (let* ((old-nonexistent (assq 'nonexistent marks))
+	     (nonexistent (gnus-range-add (cdr old-nonexistent) vanished)))
+	(if old-nonexistent
+	    (setcdr old-nonexistent nonexistent)
+	  (push (cons 'nonexistent nonexistent) marks)))
       (gnus-info-set-marks info marks t))))
 
 (defun nnimap-imap-ranges-to-gnus-ranges (irange)