Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

*** empty log message ***

  • Loading branch information...
commit 338858ec80e347830c27441aaabed7372bf19f47 1 parent e4e54d9
Lars Ingebrigtsen authored March 04, 1997
54  lisp/ChangeLog
... ...
@@ -1,5 +1,59 @@
  1
+Wed Feb 28 04:39:49 1996  Lars Ingebrigtsen  <lars@eyesore.no>
  2
+
  3
+	* gnus.el (gnus-read-active-file): Don't try to retrieve groups
  4
+	when no can be found.
  5
+	(gnus-find-method-for-group): Return "cleaner" select methods.
  6
+
  7
+	* gnus-uu.el (gnus-uu-uustrip-article): Don't loop forever if the
  8
+	uudecode is silent.
  9
+
  10
+	* nnmail.el (nnmail-search-unix-mail-delim): Stricter 822-delim
  11
+	format. 
  12
+
  13
+	* gnus.el (gnus-summary-local-variables): Didn't clear
  14
+	`gnus-cache-removable-articles'.
  15
+	(gnus-buffer-configuration): Display article-copy in reply and
  16
+	followup. 
  17
+
  18
+	* nnvirtual.el (nnvirtual-retrieve-headers): Always insert new
  19
+	Xref headers.
  20
+
  21
+	* gnus.el (gnus-add-marked-articles): Remove empty mark lists. 
  22
+
  23
+	* nnvirtual.el (nnvirtual-retrieve-headers): Propagate
  24
+	`fetch-old'. 
  25
+
  26
+	* gnus.el (gnus-check-server): Accept a `silent' parameter.
  27
+
  28
+	* nnvirtual.el (nnvirtual-retrieve-headers): Make sure the proper
  29
+	server is opened. 
  30
+
  31
+	* gnus.el (gnus-recenter): Don't do unconditional horizontal
  32
+	recentering. 
  33
+
  34
+	* gnus-vis.el (gnus-article-next-button): Skip past intangible
  35
+	buttons. 
  36
+
  37
+	* gnus-msg.el (gnus-inews-insert-archive-gcc): Don't do archiving
  38
+	if `gnus-message-archive-method' is nil.
  39
+
  40
+	* gnus.el (gnus-find-method-for-group): Don't add `*-address'
  41
+	indiscriminately. 
  42
+
  43
+Tue Feb 27 08:50:10 1996  Lars Ingebrigtsen  <lars@eyesore.no>
  44
+
  45
+	* gnus-msg.el (gnus-draft-group): Would return a bogus group
  46
+	name. 
  47
+
  48
+	* nndir.el (nndir-open-server): Escape ftp errors.
  49
+
  50
+	* gnus-msg.el (gnus-mail-reply): Handle "always" Mail-Reply-To. 
  51
+	(gnus-debug): Produced messy bug reports.
  52
+
1 53
 Tue Feb 27 04:04:17 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
2 54
 
  55
+	* gnus.el: 0.45 is released.
  56
+
3 57
 	* nntp.el (nntp-retry-on-break): New variable.
4 58
 	(nntp-send-command): Use it.
5 59
 
14  lisp/gnus-cite.el
@@ -278,11 +278,10 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
278 278
       (save-restriction
279 279
 	(while (cdr marks)
280 280
 	  (widen)
281  
-	  (narrow-to-region (car (car marks)) (car (cadr marks)))
282  
-	  (let ((adaptive-fill-regexp (concat "^" (regexp-quote
283  
-						   (cdr (car marks)))
284  
-					      " *"))
285  
-		(fill-prefix (cdr (car marks))))
  281
+	  (narrow-to-region (caar marks) (caadr marks))
  282
+	  (let ((adaptive-fill-regexp
  283
+		 (concat "^" (regexp-quote (cdar marks)) " *"))
  284
+		(fill-prefix (cdar marks)))
286 285
 	    (fill-region (point-min) (point-max)))
287 286
 	  (set-marker (caar marks) nil)
288 287
 	  (setq marks (cdr marks)))
@@ -369,7 +368,7 @@ See also the documentation for `gnus-article-highlight-citation'."
369 368
 	(re-search-backward gnus-signature-separator nil t)
370 369
 	(setq total (count-lines start (point)))
371 370
 	(while atts
372  
-	  (setq hiden (+ hiden (length (cdr (assoc (cdr (car atts))
  371
+	  (setq hiden (+ hiden (length (cdr (assoc (cdar atts)
373 372
 						   gnus-cite-prefix-alist))))
374 373
 		atts (cdr atts)))
375 374
 	(if (or force
@@ -378,8 +377,7 @@ See also the documentation for `gnus-article-highlight-citation'."
378 377
 	    (progn
379 378
 	      (setq atts gnus-cite-attribution-alist)
380 379
 	      (while atts
381  
-		(setq total (cdr (assoc (cdr (car atts)) 
382  
-					gnus-cite-prefix-alist))
  380
+		(setq total (cdr (assoc (cdar atts) gnus-cite-prefix-alist))
383 381
 		      atts (cdr atts))
384 382
 		(while total
385 383
 		  (setq hiden (car total)
12  lisp/gnus-gl.el
@@ -819,10 +819,14 @@ recommend using both scores and grouplens predictions together."
819 819
 	  (if (null arg) (not gnus-grouplens-mode)
820 820
 	    (> (prefix-numeric-value arg) 0)))
821 821
     (when gnus-grouplens-mode
822  
-      (make-local-hook 'gnus-select-article-hook)
823  
-      (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local)
824  
-      (make-local-hook 'gnus-exit-group-hook)
825  
-      (add-hook 'gnus-exit-group-hook 'bbb-put-ratings nil 'local)
  822
+      (if (not (fboundp 'make-local-hook))
  823
+         (add-hook 'gnus-select-article-hook 'grouplens-do-time)
  824
+       (make-local-hook 'gnus-select-article-hook)
  825
+       (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local))
  826
+      (if (not (fboundp 'make-local-hook))
  827
+         (add-hook 'gnus-exit-group-hook 'bbb-put-ratings)
  828
+       (make-local-hook 'gnus-exit-group-hook)
  829
+       (add-hook 'gnus-exit-group-hook 'bbb-put-ratings nil 'local))
826 830
       (make-local-variable 'gnus-score-find-score-files-function)
827 831
       (if gnus-grouplens-override-scoring
828 832
           (setq gnus-score-find-score-files-function 
6  lisp/gnus-kill.el
@@ -401,7 +401,7 @@ Returns the number of articles marked as read."
401 401
     (erase-buffer)
402 402
     (insert string ":\n\n")
403 403
     (while alist
404  
-      (insert (format " %c: %s\n" (car (car alist)) (nth idx (car alist))))
  404
+      (insert (format " %c: %s\n" (caar alist) (nth idx (car alist))))
405 405
       (setq alist (cdr alist)))))
406 406
 
407 407
 (defun gnus-kill-parse-gnus-kill-file ()
@@ -531,14 +531,14 @@ COMMAND must be a lisp expression or a string representing a key sequence."
531 531
   (if (or (not (consp (nth 2 object)))
532 532
 	  (not (consp (cdr (nth 2 object))))
533 533
 	  (and (eq 'quote (car (nth 2 object)))
534  
-	       (not (consp (cdr (car (cdr (nth 2 object))))))))
  534
+	       (not (consp (cdadr (nth 2 object))))))
535 535
       (concat "\n" (prin1-to-string object))
536 536
     (save-excursion
537 537
       (set-buffer (get-buffer-create "*Gnus PP*"))
538 538
       (buffer-disable-undo (current-buffer))
539 539
       (erase-buffer)
540 540
       (insert (format "\n(%S %S\n  '(" (nth 0 object) (nth 1 object)))
541  
-      (let ((klist (car (cdr (nth 2 object))))
  541
+      (let ((klist (cadr (nth 2 object)))
542 542
 	    (first t))
543 543
 	(while klist
544 544
 	  (insert (if first (progn (setq first nil) "")  "\n    ")
51  lisp/gnus-msg.el
@@ -1391,14 +1391,13 @@ Headers in `gnus-required-headers' will be generated."
1391 1391
       (when (and from 
1392 1392
 		 (not (gnus-check-before-posting 'sender))
1393 1393
 		 (not (string=
1394  
-		       (downcase (car (cdr (gnus-extract-address-components
1395  
-					    from))))
  1394
+		       (downcase (cadr (gnus-extract-address-components from)))
1396 1395
 		       (downcase (gnus-inews-real-user-address))))
1397 1396
 		 (or (null sender)
1398 1397
 		     (not 
1399 1398
 		      (string=
1400  
-		       (downcase (car (cdr (gnus-extract-address-components
1401  
-					    sender))))
  1399
+		       (downcase
  1400
+			(cadr (gnus-extract-address-components sender)))
1402 1401
 		       (downcase secure-sender)))))
1403 1402
 	(goto-char (point-min))    
1404 1403
 	;; Rename any old Sender headers to Original-Sender.
@@ -1884,9 +1883,23 @@ mailer."
1884 1883
 	      (setq message-id (match-string 0 gnus-warning)))
1885 1884
 	    
1886 1885
 	    (setq mctdo (not (equal mct "never")))
  1886
+	    (when (and mct (string= (downcase mct) "always"))
  1887
+	      (setq mct (or reply-to from)))
1887 1888
 
1888 1889
 	    (if (not (and followup (not to-address)))
1889  
-		(setq new-to (or reply-to from))
  1890
+		(setq new-to (or reply-to from)
  1891
+		      new-cc 
  1892
+		      (if (and mctdo
  1893
+			       (not (string= 
  1894
+				     (mail-strip-quoted-names mct)
  1895
+				     (mail-strip-quoted-names
  1896
+				      (or to-address 
  1897
+					  (if (and follow-to 
  1898
+						   (not (stringp follow-to)))
  1899
+					      sendto
  1900
+					    (or follow-to new-to
  1901
+						sender "")))))))
  1902
+			  mct))
1890 1903
 	      (let (ccalist)
1891 1904
 		(save-excursion
1892 1905
 		  (gnus-set-work-buffer)
@@ -2199,8 +2212,7 @@ If INHIBIT-PROMPT, never prompt for a Subject."
2199 2212
 		(and (re-search-forward "^Newsgroups:" nil t)
2200 2213
 		     (forward-line 1))
2201 2214
 		(while follow-to
2202  
-		  (insert (car (car follow-to)) ": " 
2203  
-			  (cdr (car follow-to)) "\n")
  2215
+		  (insert (caar follow-to) ": " (cdar follow-to) "\n")
2204 2216
 		  (setq follow-to (cdr follow-to)))))
2205 2217
 	  
2206 2218
 	  ;; If a distribution existed, we use it.
@@ -2556,15 +2568,17 @@ The source file has to be in the Emacs load path."
2556 2568
     (while olist
2557 2569
       (if (boundp (car olist))
2558 2570
 	  (insert 
2559  
-	   (pp-to-string
2560  
-	    `(setq ,(symbol-name (car olist))
2561  
-		   ,(if (or (consp (setq sym (symbol-value (car olist))))
2562  
-			    (and (symbolp sym)
2563  
-				 (not (or (eq sym nil)
2564  
-					  (eq sym t)))))
2565  
-			(list 'quote (symbol-value (car olist)))
2566  
-		      (symbol-value (car olist)))
2567  
-		   "\n")))
  2571
+	   (condition-case ()
  2572
+	       (pp-to-string
  2573
+		`(setq ,(car olist)
  2574
+		       ,(if (or (consp (setq sym (symbol-value (car olist))))
  2575
+				(and (symbolp sym)
  2576
+				     (not (or (eq sym nil)
  2577
+					      (eq sym t)))))
  2578
+			    (list 'quote (symbol-value (car olist)))
  2579
+			  (symbol-value (car olist)))))
  2580
+	     (error
  2581
+	      (format "(setq %s 'whatever)\n" (car olist)))))
2568 2582
 	(insert ";; (makeunbound '" (symbol-name (car olist)) ")\n"))
2569 2583
       (setq olist (cdr olist)))
2570 2584
     (insert "\n\n")
@@ -2792,6 +2806,9 @@ Headers will be generated before sending."
2792 2806
 	 result
2793 2807
 	 (groups
2794 2808
 	  (cond 
  2809
+	   ((null gnus-message-archive-method)
  2810
+	    ;; Ignore.
  2811
+	    nil)
2795 2812
 	   ((stringp var)
2796 2813
 	    ;; Just a single group.
2797 2814
 	    (list var))
@@ -2841,7 +2858,7 @@ Headers will be generated before sending."
2841 2858
 (defun gnus-draft-group ()
2842 2859
   "Return the name of the draft group."
2843 2860
   (gnus-group-prefixed-name 
2844  
-   (file-name-nondirectory gnus-draft-group-directory)
  2861
+   (file-name-nondirectory (directory-file-name gnus-draft-group-directory))
2845 2862
    (list 'nndraft gnus-draft-group-directory)))
2846 2863
 
2847 2864
 (defun gnus-make-draft-group ()
62  lisp/gnus-score.el
@@ -442,7 +442,7 @@ used as score."
442 442
 	  (insert "\n"))
443 443
 	(setq pad (- width 3))
444 444
 	(setq format (concat "%c: %-" (int-to-string pad) "s"))
445  
-	(insert (format format (car (car alist)) (nth idx (car alist))))
  445
+	(insert (format format (caar alist) (nth idx (car alist))))
446 446
 	(setq alist (cdr alist))
447 447
 	(setq i (1+ i))))
448 448
     ;; display ourselves in a small window at the bottom
@@ -821,10 +821,10 @@ SCORE is the score to add."
821 821
 	  (set-buffer gnus-summary-buffer)
822 822
 	  (while local
823 823
 	    (and (consp (car local))
824  
-		 (symbolp (car (car local)))
  824
+		 (symbolp (caar local))
825 825
 		 (progn
826  
-		   (make-local-variable (car (car local)))
827  
-		   (set (car (car local)) (nth 1 (car local)))))
  826
+		   (make-local-variable (caar local))
  827
+		   (set (caar local) (nth 1 (car local)))))
828 828
 	    (setq local (cdr local)))))
829 829
       (if orphan (setq gnus-orphan-score orphan))
830 830
       (setq gnus-adaptive-score-alist
@@ -912,9 +912,9 @@ SCORE is the score to add."
912 912
 	 (cond
913 913
 	  ((not (listp (car a)))
914 914
 	   (format "Illegal score element %s in %s" (car a) file))
915  
-	  ((stringp (car (car a)))
  915
+	  ((stringp (caar a))
916 916
 	   (cond 
917  
-	    ((not (listp (setq sr (cdr (car a)))))
  917
+	    ((not (listp (setq sr (cdar a))))
918 918
 	     (format "Illegal header match %s in %s" (nth 1 (car a)) file))
919 919
 	    (t
920 920
 	     (setq type (caar a))
@@ -955,7 +955,7 @@ SCORE is the score to add."
955 955
 	    (setq out (cons entry out))
956 956
 	    (while scor
957 957
 	      (setcar scor
958  
-		      (list (car (car scor)) (nth 2 (car scor))
  958
+		      (list (caar scor) (nth 2 (car scor))
959 959
 			    (and (nth 3 (car scor))
960 960
 				 (gnus-day-number (nth 3 (car scor))))
961 961
 			    (if (nth 1 (car scor)) 'r 's)))
@@ -1093,11 +1093,11 @@ SCORE is the score to add."
1093 1093
 
1094 1094
 	  ;; Add articles to `gnus-newsgroup-scored'.
1095 1095
 	  (while gnus-scores-articles
1096  
-	    (or (= gnus-summary-default-score (cdr (car gnus-scores-articles)))
  1096
+	    (or (= gnus-summary-default-score (cdar gnus-scores-articles))
1097 1097
 		(setq gnus-newsgroup-scored
1098 1098
 		      (cons (cons (mail-header-number 
1099  
-				   (car (car gnus-scores-articles)))
1100  
-				  (cdr (car gnus-scores-articles)))
  1099
+				   (caar gnus-scores-articles))
  1100
+				  (cdar gnus-scores-articles))
1101 1101
 			    gnus-newsgroup-scored)))
1102 1102
 	    (setq gnus-scores-articles (cdr gnus-scores-articles)))
1103 1103
 
@@ -1203,7 +1203,7 @@ SCORE is the score to add."
1203 1203
 	  ;; time than one would gain.
1204 1204
 	  (while articles
1205 1205
 	    (and (funcall match-func 
1206  
-			  (or (aref (car (car articles)) gnus-score-index) 0)
  1206
+			  (or (aref (caar articles) gnus-score-index) 0)
1207 1207
 			  match)
1208 1208
 		 (progn
1209 1209
 		   (and trace (setq gnus-score-trace 
@@ -1213,7 +1213,7 @@ SCORE is the score to add."
1213 1213
 				      kill)
1214 1214
 				     gnus-score-trace)))
1215 1215
 		   (setq found t)
1216  
-		   (setcdr (car articles) (+ score (cdr (car articles))))))
  1216
+		   (setcdr (car articles) (+ score (cdar articles)))))
1217 1217
 	    (setq articles (cdr articles)))
1218 1218
 	  ;; Update expire date
1219 1219
 	  (cond ((null date))		;Permanent entry.
@@ -1258,7 +1258,7 @@ SCORE is the score to add."
1258 1258
 	  ;; time than one would gain.
1259 1259
 	  (while articles
1260 1260
 	    (and
1261  
-	     (setq l (aref (car (car articles)) gnus-score-index))
  1261
+	     (setq l (aref (caar articles) gnus-score-index))
1262 1262
 	     (funcall match-func match (timezone-make-date-sortable l))
1263 1263
 	     (progn
1264 1264
 	       (and trace (setq gnus-score-trace 
@@ -1268,7 +1268,7 @@ SCORE is the score to add."
1268 1268
 				  kill)
1269 1269
 				 gnus-score-trace)))
1270 1270
 	       (setq found t)
1271  
-	       (setcdr (car articles) (+ score (cdr (car articles))))))
  1271
+	       (setcdr (car articles) (+ score (cdar articles)))))
1272 1272
 	    (setq articles (cdr articles)))
1273 1273
 	  ;; Update expire date
1274 1274
 	  (cond ((null date))		;Permanent entry.
@@ -1288,7 +1288,7 @@ SCORE is the score to add."
1288 1288
     (save-restriction
1289 1289
       (let* ((buffer-read-only nil)
1290 1290
 	     (articles gnus-scores-articles)
1291  
-	     (last (mail-header-number (car (car gnus-scores-articles))))
  1291
+	     (last (mail-header-number (caar gnus-scores-articles)))
1292 1292
 	     (all-scores scores)
1293 1293
 	     (request-func (cond ((string= "head" (downcase header))
1294 1294
 				  'gnus-request-head)
@@ -1307,7 +1307,7 @@ SCORE is the score to add."
1307 1307
 	      (setq ofunc request-func)
1308 1308
 	      (setq request-func 'gnus-request-article)))
1309 1309
 	(while articles
1310  
-	  (setq article (mail-header-number (car (car articles))))
  1310
+	  (setq article (mail-header-number (caar articles)))
1311 1311
 	  (gnus-message 7 "Scoring on article %s of %s..." article last)
1312 1312
 	  (if (not (funcall request-func article gnus-newsgroup-name))
1313 1313
 	      ()
@@ -1355,7 +1355,7 @@ SCORE is the score to add."
1355 1355
 		  (if (funcall search-func match nil t)
1356 1356
 		      ;; Found a match, update scores.
1357 1357
 		      (progn
1358  
-			(setcdr (car articles) (+ score (cdr (car articles))))
  1358
+			(setcdr (car articles) (+ score (cdar articles)))
1359 1359
 			(setq found t)
1360 1360
 			(and trace (setq gnus-score-trace 
1361 1361
 					 (cons
@@ -1489,8 +1489,8 @@ SCORE is the score to add."
1489 1489
       ;; Don't enter a score if there already is one.
1490 1490
       (while (setq entry (pop scores))
1491 1491
 	(and (equal "references" (car entry))
1492  
-	     (or (null (nth 3 (car (cdr entry))))
1493  
-		 (eq 's (nth 3 (car (cdr entry)))))
  1492
+	     (or (null (nth 3 (cadr entry)))
  1493
+		 (eq 's (nth 3 (cadr entry))))
1494 1494
 	     (assoc id entry)
1495 1495
 	     (setq dont t)))
1496 1496
       (unless dont
@@ -1734,17 +1734,17 @@ SCORE is the score to add."
1734 1734
 	(setq elem (cdr elem))
1735 1735
 	(while elem
1736 1736
 	  (setcdr (car elem) 
1737  
-		  (cons (if (eq (car (car elem)) 'followup)
  1737
+		  (cons (if (eq (caar elem) 'followup)
1738 1738
 			    "references"
1739  
-			  (symbol-name (car (car elem))))
1740  
-			(cdr (car elem))))
  1739
+			  (symbol-name (caar elem)))
  1740
+			(cdar elem)))
1741 1741
 	  (setcar (car elem) 
1742 1742
 		  `(lambda (h)
1743 1743
 		     (,(intern 
1744 1744
 			(concat "mail-header-" 
1745  
-				(if (eq (car (car elem)) 'followup)
  1745
+				(if (eq (caar elem) 'followup)
1746 1746
 				    "message-id"
1747  
-				  (downcase (symbol-name (car (car elem)))))))
  1747
+				  (downcase (symbol-name (caar elem))))))
1748 1748
 		      h)))
1749 1749
 	  (setq elem (cdr elem)))
1750 1750
 	(setq malist (cdr malist)))
@@ -1761,7 +1761,7 @@ SCORE is the score to add."
1761 1761
 	    ()
1762 1762
 	  (when (setq headers (gnus-data-header (car data)))
1763 1763
 	    (while elem 
1764  
-	      (setq match (funcall (car (car elem)) headers))
  1764
+	      (setq match (funcall (caar elem) headers))
1765 1765
 	      (gnus-summary-score-entry 
1766 1766
 	       (nth 1 (car elem)) match
1767 1767
 	       (cond
@@ -1870,8 +1870,8 @@ This mode is an extended emacs-lisp mode.
1870 1870
     (gnus-add-current-to-buffer-list)
1871 1871
     (erase-buffer)
1872 1872
     (while trace
1873  
-      (insert (format "%S  ->  %s\n"  (cdr (car trace))
1874  
-		      (file-name-nondirectory (car (car trace)))))
  1873
+      (insert (format "%S  ->  %s\n" (cdar trace)
  1874
+		      (file-name-nondirectory (caar trace))))
1875 1875
       (setq trace (cdr trace)))
1876 1876
     (goto-char (point-min))
1877 1877
     (pop-to-buffer buf)))
@@ -2122,21 +2122,21 @@ The list is determined from the variable gnus-score-file-alist."
2122 2122
 	(cdr score-files)		;ensures caching groups with no matches
2123 2123
       ;; handle the multiple match alist
2124 2124
       (while alist
2125  
-	(and (string-match (car (car alist)) group)
  2125
+	(and (string-match (caar alist) group)
2126 2126
 	     (setq score-files
2127  
-		   (nconc score-files (copy-sequence (cdr (car alist))))))
  2127
+		   (nconc score-files (copy-sequence (cdar alist)))))
2128 2128
 	(setq alist (cdr alist)))
2129 2129
       (setq alist gnus-score-file-single-match-alist)
2130 2130
       ;; handle the single match alist
2131 2131
       (while alist
2132  
-	(and (string-match (car (car alist)) group)
  2132
+	(and (string-match (caar alist) group)
2133 2133
 	     ;; progn used just in case ("regexp") has no files
2134 2134
 	     ;; and score-files is still nil. -sj
2135 2135
 	     ;; this can be construed as a "stop searching here" feature :>
2136 2136
 	     ;; and used to simplify regexps in the single-alist 
2137 2137
 	     (progn
2138 2138
 	       (setq score-files
2139  
-		     (nconc score-files (copy-sequence (cdr (car alist)))))
  2139
+		     (nconc score-files (copy-sequence (cdar alist))))
2140 2140
 	       (setq alist nil)))
2141 2141
 	(setq alist (cdr alist)))
2142 2142
       ;; cache the score files
10  lisp/gnus-soup.el
@@ -177,7 +177,7 @@ Uses the process/prefix convention."
177 177
 	(newsrc (cdr gnus-newsrc-alist)))
178 178
     (while newsrc
179 179
       (and (<= (nth 1 (car newsrc)) level)
180  
-	   (gnus-soup-group-brew (car (car newsrc))))
  180
+	   (gnus-soup-group-brew (caar newsrc)))
181 181
       (setq newsrc (cdr newsrc)))
182 182
     (gnus-soup-save-areas)))
183 183
 
@@ -309,12 +309,10 @@ If NOT-ALL, don't pack ticked articles."
309 309
     (save-excursion
310 310
       (while prefix
311 311
 	(gnus-set-work-buffer)
312  
-	(insert (format "(setq gnus-soup-prev-prefix %d)\n" 
313  
-			(cdr (car prefix))))
314  
-	(gnus-make-directory (car (car prefix)))
  312
+	(insert (format "(setq gnus-soup-prev-prefix %d)\n" (cdar prefix)))
  313
+	(gnus-make-directory (caar prefix))
315 314
 	(write-region (point-min) (point-max)
316  
-		      (concat (car (car prefix)) 
317  
-			      gnus-soup-prefix-file) 
  315
+		      (concat (caar prefix) gnus-soup-prefix-file) 
318 316
 		      nil 'nomesg)
319 317
 	(setq prefix (cdr prefix))))))
320 318
 
11  lisp/gnus-srvr.el
@@ -201,9 +201,8 @@ The following commands are available:
201 201
     (while opened 
202 202
       (unless (member (caar opened) done)
203 203
 	(gnus-server-insert-server-line 
204  
-	 (setq op-ser (format "%s:%s" (car (car (car opened))) 
205  
-			      (nth 1 (car (car opened)))))
206  
-	 (car (car opened)))
  204
+	 (setq op-ser (format "%s:%s" (caaar opened) (nth 1 (caar opened))))
  205
+	 (caar opened))
207 206
 	(push (list op-ser (caar opened)) gnus-inserted-opened-servers))
208 207
       (setq opened (cdr opened))))
209 208
   (goto-char (point-min))
@@ -275,10 +274,10 @@ The following commands are available:
275 274
 	(killed (car gnus-server-killed-servers)))
276 275
     (if (not server) 
277 276
 	(setq gnus-server-alist (nconc gnus-server-alist (list killed)))
278  
-      (if (string= server (car (car gnus-server-alist)))
  277
+      (if (string= server (caar gnus-server-alist))
279 278
 	  (setq gnus-server-alist (cons killed gnus-server-alist))
280 279
 	(while (and (cdr alist)
281  
-		    (not (string= server (car (car (cdr alist))))))
  280
+		    (not (string= server (caadr alist))))
282 281
 	  (setq alist (cdr alist)))
283 282
 	(if alist
284 283
 	    (setcdr alist (cons killed (cdr alist)))
@@ -534,7 +533,7 @@ The following commands are available:
534 533
       (setq mode-line-buffer-identification
535 534
 	    (list
536 535
 	     (format
537  
-	      "Gnus: %%b {%s:%s}" (car method) (car (cdr method)))))
  536
+	      "Gnus: %%b {%s:%s}" (car method) (cadr method))))
538 537
       (save-excursion
539 538
 	(set-buffer nntp-server-buffer)
540 539
 	(let ((cur (current-buffer)))
36  lisp/gnus-topic.el
@@ -235,10 +235,10 @@ articles in the topic and its subtopics."
235 235
       (while (and (zerop (forward-line 1))
236 236
 		  (> (or (gnus-group-topic-level) (1+ level)) level)))
237 237
       (delete-region beg (point))
238  
-      (setcar (cdr (car (cdr (gnus-topic-find-topology topic))))
  238
+      (setcar (cdadr (gnus-topic-find-topology topic))
239 239
 	      (if insert 'visible 'invisible))
240 240
       (when hide
241  
-	(setcdr (cdr (car (cdr (gnus-topic-find-topology topic))))
  241
+	(setcdr (cdadr (gnus-topic-find-topology topic))
242 242
 		(list hide)))
243 243
       (unless total-remove
244 244
 	(gnus-topic-insert-topic topic in-level)))))
@@ -292,12 +292,12 @@ articles in the topic and its subtopics."
292 292
 
293 293
 (defun gnus-topic-previous-topic (topic)
294 294
   "Return the previous topic on the same level as TOPIC."
295  
-  (let ((top (cdr (cdr (gnus-topic-find-topology
296  
-			(gnus-topic-parent-topic topic))))))
297  
-    (unless (equal topic (car (car (car top))))
298  
-      (while (and top (not (equal (car (car (car (cdr top)))) topic)))
  295
+  (let ((top (cddr (gnus-topic-find-topology
  296
+			(gnus-topic-parent-topic topic)))))
  297
+    (unless (equal topic (caaar top))
  298
+      (while (and top (not (equal (caaadr top) topic)))
299 299
 	(setq top (cdr top)))
300  
-      (car (car (car top))))))
  300
+      (caaar top))))
301 301
 
302 302
 (defun gnus-topic-parent-topic (topic &optional topology)
303 303
   "Return the parent of TOPIC."
@@ -306,7 +306,7 @@ articles in the topic and its subtopics."
306 306
   (let ((parent (car (pop topology)))
307 307
 	result found)
308 308
     (while (and topology
309  
-		(not (setq found (equal (car (car (car topology))) topic)))
  309
+		(not (setq found (equal (caaar topology) topic)))
310 310
 		(not (setq result (gnus-topic-parent-topic topic 
311 311
 							   (car topology)))))
312 312
       (setq topology (cdr topology)))
@@ -319,7 +319,7 @@ articles in the topic and its subtopics."
319 319
     (setq level 0))
320 320
   (let ((top topology)
321 321
 	result)
322  
-    (if (equal (car (car topology)) topic)
  322
+    (if (equal (caar topology) topic)
323 323
 	(progn
324 324
 	  (when remove
325 325
 	    (delq topology remove))
@@ -342,9 +342,9 @@ articles in the topic and its subtopics."
342 342
 	(alist gnus-topic-alist)
343 343
 	changed)
344 344
     (while alist
345  
-      (unless (member (car (car alist)) topics)
  345
+      (unless (member (caar alist) topics)
346 346
 	(nconc gnus-topic-topology
347  
-	       (list (list (list (car (car alist)) 'visible))))
  347
+	       (list (list (list (caar alist) 'visible))))
348 348
 	(setq changed t))
349 349
       (setq alist (cdr alist)))
350 350
     (when changed
@@ -363,7 +363,7 @@ articles in the topic and its subtopics."
363 363
   (unless topology
364 364
     (setq topology gnus-topic-topology 
365 365
 	  gnus-tmp-topics nil))
366  
-  (push (car (car topology)) gnus-tmp-topics)
  366
+  (push (caar topology) gnus-tmp-topics)
367 367
   (mapcar 'gnus-topic-list (cdr topology))
368 368
   gnus-tmp-topics)
369 369
 
@@ -391,8 +391,8 @@ articles in the topic and its subtopics."
391 391
   (let ((alist gnus-topic-alist)
392 392
 	out)
393 393
     (while alist
394  
-      (when (member group (cdr (car alist)))
395  
-	(setq out (car (car alist))
  394
+      (when (member group (cdar alist))
  395
+	(setq out (caar alist)
396 396
 	      alist nil))
397 397
       (setq alist (cdr alist)))
398 398
     out))
@@ -669,14 +669,14 @@ group."
669 669
   (when (gnus-topic-find-topology topic)
670 670
     (error "Topic aleady exists"))
671 671
   (unless parent
672  
-    (setq parent (car (car gnus-topic-topology))))
  672
+    (setq parent (caar gnus-topic-topology)))
673 673
   (let ((top (cdr (gnus-topic-find-topology parent))))
674 674
     (unless top
675 675
       (error "No such parent topic: %s" parent))
676 676
     (if previous
677 677
 	(progn
678 678
 	  (while (and (cdr top)
679  
-		      (not (equal (car (car (car (cdr top)))) previous)))
  679
+		      (not (equal (caaadr top) previous)))
680 680
 	    (setq top (cdr top)))
681 681
 	  (setcdr top (cons (list (list topic 'visible)) (cdr top))))
682 682
       (nconc top (list (list (list topic 'visible)))))
@@ -802,7 +802,7 @@ group."
802 802
 	(if (not (cdr alist))
803 803
 	    (setcdr alist (nconc yanked (cdr alist)))
804 804
 	  (while (cdr alist)
805  
-	    (when (equal (car (cdr alist)) prev)
  805
+	    (when (equal (cadr alist) prev)
806 806
 	      (setcdr alist (nconc yanked (cdr alist)))
807 807
 	      (setq alist nil))
808 808
 	    (setq alist (cdr alist))))))
@@ -884,7 +884,7 @@ group."
884 884
   (let ((top (gnus-topic-find-topology old-name))
885 885
 	(entry (assoc old-name gnus-topic-alist)))
886 886
     (when top
887  
-      (setcar (car (cdr top)) new-name))
  887
+      (setcar (cadr top) new-name))
888 888
     (when entry 
889 889
       (setcar entry new-name))
890 890
     (gnus-group-list-groups)))
18  lisp/gnus-uu.el
@@ -452,15 +452,15 @@ The headers will be included in the sequence they are matched.")
452 452
     (let ((fs gnus-uu-digest-from-subject))
453 453
       (if (not fs)
454 454
 	  ()
455  
-	(setq from (car (car fs))
456  
-	      subject (gnus-simplify-subject-fuzzy (cdr (car fs)))
  455
+	(setq from (caar fs)
  456
+	      subject (gnus-simplify-subject-fuzzy (cdar fs))
457 457
 	      fs (cdr fs))
458 458
 	(while (and fs (or from subject))
459 459
 	  (and from
460  
-	       (or (string= from (car (car fs)))
  460
+	       (or (string= from (caar fs))
461 461
 		   (setq from nil)))
462 462
 	  (and subject
463  
-	       (or (string= (gnus-simplify-subject-fuzzy (cdr (car fs)))
  463
+	       (or (string= (gnus-simplify-subject-fuzzy (cdar fs))
464 464
 			    subject)
465 465
 		   (setq subject nil)))
466 466
 	  (setq fs (cdr fs))))
@@ -1060,7 +1060,7 @@ The headers will be included in the sequence they are matched.")
1060 1060
       (buffer-disable-undo (current-buffer))
1061 1061
       (while string-list
1062 1062
 	(erase-buffer)
1063  
-	(insert (car (car string-list)))
  1063
+	(insert (caar string-list))
1064 1064
 	;; Translate multiple spaces to one space.
1065 1065
 	(goto-char (point-min))
1066 1066
 	(while (re-search-forward "[ \t]+" nil t)
@@ -1376,8 +1376,10 @@ The headers will be included in the sequence they are matched.")
1376 1376
 					;			  (sleep-for 2)
1377 1377
 			  (setq state (list 'wrong-type)))))
1378 1378
 
1379  
-		     (if (memq 'end state)
1380  
-			 (accept-process-output gnus-uu-uudecode-process)))
  1379
+		     (when (memq 'end state)
  1380
+		       (while (memq (process-status gnus-uu-uudecode-process)
  1381
+				    '(open run))
  1382
+			 (accept-process-output gnus-uu-uudecode-process 1))))
1381 1383
 		 (setq state (list 'wrong-type))))
1382 1384
 	  (if (not gnus-uu-uudecode-process)
1383 1385
 	      (setq state (list 'wrong-type)))))
@@ -1436,7 +1438,7 @@ The headers will be included in the sequence they are matched.")
1436 1438
        (setq rule (car action-list))
1437 1439
        (setq action-list (cdr action-list))
1438 1440
        (if (string-match (car rule) file-name)
1439  
-	   (setq action (car (cdr rule))))))
  1441
+	   (setq action (cadr rule)))))
1440 1442
     action))
1441 1443
 
1442 1444
 (defun gnus-uu-treat-archive (file-path)
8  lisp/gnus-vis.el
@@ -855,14 +855,14 @@ ticked: The number of ticked articles in the group.
855 855
 			      (cons 
856 856
 			       (apply 
857 857
 				'nconc
858  
-				(list (car (car ts)))
  858
+				(list (caar ts))
859 859
 				(let ((ps perms)
860 860
 				      outp)
861 861
 				  (while ps
862 862
 				    (setq outp
863 863
 					  (cons
864 864
 					   (vector
865  
-					    (car (car ps)) 
  865
+					    (caar ps) 
866 866
 					    (list
867 867
 					     'gnus-summary-score-entry
868 868
 					     (nth 1 header)
@@ -1229,6 +1229,7 @@ If N is negative, move backward instead."
1229 1229
   (interactive "p")
1230 1230
   (let ((function (if (< n 0) 'prev-single-property-change
1231 1231
 		    'next-single-property-change))
  1232
+	(inhibit-point-motion-hooks t)
1232 1233
 	(limit (if (< n 0) (point-min) (point-max))))
1233 1234
     (setq n (abs n))
1234 1235
     (while (and (not (= limit (point)))
@@ -1238,6 +1239,9 @@ If N is negative, move backward instead."
1238 1239
 	(goto-char (funcall function (point) 'gnus-callback nil limit)))
1239 1240
       ;; Go to the next (or previous) button.
1240 1241
       (gnus-goto-char (funcall function (point) 'gnus-callback nil limit))
  1242
+      ;; Skip past intangible buttons.
  1243
+      (when (get-text-property (point) 'intangible)
  1244
+	(incf n))
1241 1245
       (decf n))
1242 1246
     (unless (zerop n)
1243 1247
       (gnus-message 5 "No more buttons"))
294  lisp/gnus.el
@@ -760,6 +760,14 @@ will be kept while the rest will be deleted before saving.")
760 760
 (defvar gnus-signature-separator "^-- *$"
761 761
   "Regexp matching signature separator.")
762 762
 
  763
+(defvar gnus-signature-limit nil
  764
+  "Provide a limit to what is considered a signature.
  765
+If it is a number, no signature may not be longer (in characters) than
  766
+that number.  If it is a function, the function will be called without
  767
+any parameters, and if it returns nil, there is no signature in the
  768
+buffer.  If it is a string, it will be used as a regexp.  If it
  769
+matches, the text in question is not a signature.")
  770
+
763 771
 (defvar gnus-auto-extend-newsgroup t
764 772
   "*If non-nil, extend newsgroup forward and backward when requested.")
765 773
 
@@ -794,7 +802,9 @@ The \"unread\" movement commands will stay on the same line if the
794 802
 current article is unread.")
795 803
 
796 804
 (defvar gnus-auto-center-summary t
797  
-  "*If non-nil, always center the current summary buffer.")
  805
+  "*If non-nil, always center the current summary buffer.
  806
+In particular, if `vertical' do only vertical recentering.  If non-nil
  807
+and non-`vertical', do both horizontal and vertical recentering.")
798 808
 
799 809
 (defvar gnus-break-pages t
800 810
   "*If non-nil, do page breaking on articles.
@@ -866,7 +876,7 @@ beginning of a line.")
866 876
 	       (mail 1.0 point)))
867 877
     (summary-reply
868 878
      (vertical 1.0
869  
-	       (article 0.5)
  879
+	       (article-copy 0.5)
870 880
 	       (mail 1.0 point)))
871 881
     (pick
872 882
      (vertical 1.0
@@ -895,7 +905,7 @@ beginning of a line.")
895 905
 	       (post 1.0 point)))
896 906
     (reply
897 907
      (vertical 1.0
898  
-	       (article 0.5)
  908
+	       (article-copy 0.5)
899 909
 	       (mail 1.0 point)))
900 910
     (mail-forward
901 911
      (vertical 1.0
@@ -920,7 +930,7 @@ beginning of a line.")
920 930
 	       ("*Shell Command Output*" 1.0)))
921 931
     (followup
922 932
      (vertical 1.0
923  
-	       (article 0.5)
  933
+	       (article-copy 0.5)
924 934
 	       (post 1.0 point)))
925 935
     (followup-yank
926 936
      (vertical 1.0
@@ -959,6 +969,7 @@ buffer configuration.")
959 969
     (picons . "*Picons*")
960 970
     (tree . gnus-tree-buffer)
961 971
     (info . gnus-info-buffer)
  972
+    (article-copy . gnus-article-copy)
962 973
     (draft . gnus-draft-buffer))
963 974
   "Mapping from short symbols to buffer names or buffer variables.")
964 975
 
@@ -1694,7 +1705,7 @@ variable (string, integer, character, etc).")
1694 1705
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
1695 1706
   "The mail address of the Gnus maintainers.")
1696 1707
 
1697  
-(defconst gnus-version "September Gnus v0.45"
  1708
+(defconst gnus-version "September Gnus v0.46"
1698 1709
   "Version number for this version of Gnus.")
1699 1710
 
1700 1711
 (defvar gnus-info-nodes
@@ -1908,7 +1919,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
1908 1919
     (gnus-newsgroup-adaptive . gnus-use-adaptive-scoring)
1909 1920
     gnus-newsgroup-adaptive-score-file
1910 1921
     (gnus-newsgroup-expunged-tally . 0)
1911  
-    gnus-cache-removeable-articles gnus-newsgroup-cached
  1922
+    gnus-cache-removable-articles gnus-newsgroup-cached
1912 1923
     gnus-newsgroup-data gnus-newsgroup-data-reverse
1913 1924
     gnus-newsgroup-limit gnus-newsgroup-limits)
1914 1925
   "Variables that are buffer-local to the summary buffers.")
@@ -4861,7 +4872,7 @@ already."
4861 4872
 			      (gnus-parse-format
4862 4873
 			       gnus-group-mode-line-format
4863 4874
 			       gnus-group-mode-line-format-alist))))
4864  
-	   (gnus-tmp-news-server (car (cdr gnus-select-method)))
  4875
+	   (gnus-tmp-news-server (cadr gnus-select-method))
4865 4876
 	   (gnus-tmp-news-method (car gnus-select-method))
4866 4877
 	   (max-len 60)
4867 4878
 	   gnus-tmp-header			;Dummy binding for user-defined formats
@@ -5411,8 +5422,7 @@ of the Earth\".	 There is no undo."
5411 5422
 	(gnus-group-goto-group group)
5412 5423
 	(gnus-group-kill-group)
5413 5424
 	;; ... changing its name ...
5414  
-	(setcar (cdr (car gnus-list-of-killed-groups))
5415  
-		new-name)
  5425
+	(setcar (cdar gnus-list-of-killed-groups) new-name)
5416 5426
 	;; ... and then yanking it.  Magic!
5417 5427
 	(gnus-group-yank-group)
5418 5428
 	(gnus-set-active new-name (gnus-active group))
@@ -6060,7 +6070,7 @@ of groups killed."
6060 6070
 	   ((setq entry (gnus-gethash group gnus-newsrc-hashtb))
6061 6071
 	    (push (cons (car entry) (nth 2 entry))
6062 6072
 		  gnus-list-of-killed-groups)
6063  
-	    (setcdr (cdr entry) (cdr (cdr (cdr entry)))))
  6073
+	    (setcdr (cdr entry) (cdddr entry)))
6064 6074
 	   ((member group gnus-zombie-list)
6065 6075
 	    (setq gnus-zombie-list (delete group gnus-zombie-list)))))
6066 6076
 	(gnus-make-hashtable-from-newsrc-alist)))
@@ -6509,7 +6519,7 @@ The hook `gnus-exit-gnus-hook' is called before actually exiting."
6509 6519
   (let ((methods gnus-valid-select-methods)
6510 6520
 	func)
6511 6521
     (while methods
6512  
-      (if (fboundp (setq func (intern (concat (car (car methods))
  6522
+      (if (fboundp (setq func (intern (concat (caar methods)
6513 6523
 					      "-request-close"))))
6514 6524
 	  (funcall func))
6515 6525
       (setq methods (cdr methods)))))
@@ -6915,8 +6925,8 @@ The following commands are available:
6915 6925
     (while locals
6916 6926
       (if (consp (car locals))
6917 6927
 	  (progn
6918  
-	    (make-local-variable (car (car locals)))
6919  
-	    (set (car (car locals)) (eval (cdr (car locals)))))
  6928
+	    (make-local-variable (caar locals))
  6929
+	    (set (caar locals) (eval (cdar locals))))
6920 6930
 	(make-local-variable (car locals))
6921 6931
 	(set (car locals) nil))
6922 6932
       (setq locals (cdr locals))))
@@ -6963,8 +6973,8 @@ The following commands are available:
6963 6973
   (let ((locals gnus-summary-local-variables))
6964 6974
     (while locals
6965 6975
       (if (consp (car locals))
6966  
-	  (and (vectorp (car (car locals)))
6967  
-	       (set (car (car locals)) nil))
  6976
+	  (and (vectorp (caar locals))
  6977
+	       (set (caar locals) nil))
6968 6978
 	(and (vectorp (car locals))
6969 6979
 	     (set (car locals) nil)))
6970 6980
       (setq locals (cdr locals)))))
@@ -7018,7 +7028,7 @@ The following commands are available:
7018 7028
     (setcdr data (cons (gnus-data-make number mark pos header level)
7019 7029
 		       (cdr data)))
7020 7030
     (setq gnus-newsgroup-data-reverse nil)
7021  
-    (gnus-data-update-list (cdr (cdr data)) offset)))
  7031
+    (gnus-data-update-list (cddr data) offset)))
7022 7032
 
7023 7033
 (defun gnus-data-enter-list (after-article list &optional offset)
7024 7034
   (when list
@@ -7045,9 +7055,9 @@ The following commands are available:
7045 7055
 	(setq gnus-newsgroup-data (cdr gnus-newsgroup-data)
7046 7056
 	      gnus-newsgroup-data-reverse nil)
7047 7057
       (while (cdr data)
7048  
-	(and (= (gnus-data-number (car (cdr data))) article)
  7058
+	(and (= (gnus-data-number (cadr data)) article)
7049 7059
 	     (progn
7050  
-	       (setcdr data (cdr (cdr data)))
  7060
+	       (setcdr data (cddr data))
7051 7061
 	       (and offset (gnus-data-update-list (cdr data) offset))
7052 7062
 	       (setq data nil
7053 7063
 		     gnus-newsgroup-data-reverse nil)))
@@ -7573,7 +7583,7 @@ If NO-DISPLAY, don't generate a summary buffer."
7573 7583
 	  (result threads)
7574 7584
 	  subject hthread whole-subject)
7575 7585
       (while threads
7576  
-	(setq whole-subject (mail-header-subject (car (car threads))))
  7586
+	(setq whole-subject (mail-header-subject (caar threads)))
7577 7587
 	(if (and gnus-summary-gather-exclude-subject
7578 7588
 		 (string-match gnus-summary-gather-exclude-subject
7579 7589
 			       whole-subject))
@@ -7599,12 +7609,12 @@ If NO-DISPLAY, don't generate a summary buffer."
7599 7609
 	      (progn
7600 7610
 		;; We enter a dummy root into the thread, if we
7601 7611
 		;; haven't done that already.
7602  
-		(unless (stringp (car (car hthread)))
  7612
+		(unless (stringp (caar hthread))
7603 7613
 		  (setcar hthread (list whole-subject (car hthread))))
7604 7614
 		;; We add this new gathered thread to this gathered
7605 7615
 		;; thread.
7606 7616
 		(setcdr (car hthread)
7607  
-			(nconc (cdr (car hthread)) (list (car threads))))
  7617
+			(nconc (cdar hthread) (list (car threads))))
7608 7618
 		;; Remove it from the list of threads.
7609 7619
 		(setcdr prev (cdr threads))
7610 7620
 		(setq threads prev))
@@ -7657,9 +7667,9 @@ If NO-DISPLAY, don't generate a summary buffer."
7657 7667
   "Sort subtreads inside each gathered thread by article number."
7658 7668
   (let ((result threads))
7659 7669
     (while threads
7660  
-      (when (stringp (car (car threads)))
  7670
+      (when (stringp (caar threads))
7661 7671
 	(setcdr (car threads)
7662  
-		(sort (cdr (car threads)) 'gnus-thread-sort-by-number)))
  7672
+		(sort (cdar threads) 'gnus-thread-sort-by-number)))
7663 7673
       (setq threads (cdr threads)))
7664 7674
     result))
7665 7675
 
@@ -7744,7 +7754,7 @@ If NO-DISPLAY, don't generate a summary buffer."
7744 7754
        (when (not (car (symbol-value refs)))
7745 7755
 	 (setq heads (cdr (symbol-value refs)))
7746 7756
 	 (while heads
7747  
-	   (if (memq (mail-header-number (car (car heads)))
  7757
+	   (if (memq (mail-header-number (caar heads))
7748 7758
 		     gnus-newsgroup-dormant)
7749 7759
 	       (setq heads (cdr heads))
7750 7760
 	     (setq id (symbol-name refs))
@@ -7817,7 +7827,7 @@ If NO-DISPLAY, don't generate a summary buffer."
7817 7827
 	(while thread
7818 7828
 	  (unless (memq (setq thr (gnus-id-to-thread
7819 7829
 				      (gnus-root-id
7820  
-				       (mail-header-id (car (car thread))))))
  7830
+				       (mail-header-id (caar thread)))))
7821 7831
 			roots)
7822 7832
 	    (push thr roots))
7823 7833
 	  (setq thread (cdr thread)))
@@ -7883,7 +7893,7 @@ If NO-DISPLAY, don't generate a summary buffer."
7883 7893
     ;; First go up in this thread until we find the root.
7884 7894
     (setq last-id (gnus-root-id id))
7885 7895
     (setq headers (list (car (gnus-id-to-thread last-id))
7886  
-			(car (car (cdr (gnus-id-to-thread last-id))))))
  7896
+			(caadr (gnus-id-to-thread last-id))))
7887 7897
     ;; We have now found the real root of this thread.	It might have
7888 7898
     ;; been gathered into some loose thread, so we have to search
7889 7899
     ;; through the threads to find the thread we wanted.
@@ -7898,7 +7908,7 @@ If NO-DISPLAY, don't generate a summary buffer."
7898 7908
 	    (progn
7899 7909
 	      (setq sub (cdr sub))
7900 7910
 	      (while sub
7901  
-		(when (member (car (car sub)) headers)
  7911
+		(when (member (caar sub) headers)
7902 7912
 		  (setq thread (car threads)
7903 7913
 			threads nil
7904 7914
 			sub nil))
@@ -8118,31 +8128,31 @@ or a straight list of headers."
8118 8128
 	(if (and (= gnus-tmp-level 0)
8119 8129
 		 (not (setq gnus-tmp-dummy-line nil))
8120 8130
 		 (or (not stack)
8121  
-		     (= (car (car stack)) 0))
  8131
+		     (= (caar stack) 0))
8122 8132
 		 (not gnus-tmp-false-parent)
8123 8133
 		 (or gnus-tmp-new-adopts new-roots))
8124 8134
 	    (if gnus-tmp-new-adopts
8125 8135
 		(setq gnus-tmp-level (if gnus-tmp-root-expunged 0 1)
8126 8136
 		      thread (list (car gnus-tmp-new-adopts))
8127  
-		      gnus-tmp-header (car (car thread))
  8137
+		      gnus-tmp-header (caar thread)
8128 8138
 		      gnus-tmp-new-adopts (cdr gnus-tmp-new-adopts))
8129 8139
 	      (if new-roots
8130 8140
 		  (setq thread (list (car new-roots))
8131  
-			gnus-tmp-header (car (car thread))
  8141
+			gnus-tmp-header (caar thread)
8132 8142
 			new-roots (cdr new-roots))))
8133 8143
 
8134 8144
 	  (if threads
8135 8145
 	      ;; If there are some threads, we do them before the
8136 8146
 	      ;; threads on the stack.
8137 8147
 	      (setq thread threads
8138  
-		    gnus-tmp-header (car (car thread)))
  8148
+		    gnus-tmp-header (caar thread))
8139 8149
 	    ;; There were no current threads, so we pop something off
8140 8150
 	    ;; the stack.
8141 8151
 	    (setq state (car stack)
8142 8152
 		  gnus-tmp-level (car state)
8143 8153
 		  thread (cdr state)
8144 8154
 		  stack (cdr stack)
8145  
-		  gnus-tmp-header (car (car thread)))))
  8155
+		  gnus-tmp-header (caar thread))))
8146 8156
 
8147 8157
 	(setq gnus-tmp-false-parent nil)
8148 8158
 	(setq gnus-tmp-root-expunged nil)
@@ -8154,14 +8164,14 @@ or a straight list of headers."
8154 8164
 	     ((eq gnus-summary-make-false-root 'adopt)
8155 8165
 	      ;; We let the first article adopt the rest.
8156 8166
 	      (setq gnus-tmp-new-adopts (nconc gnus-tmp-new-adopts
8157  
-					       (cdr (cdr (car thread)))))
  8167
+					       (cddar thread)))
8158 8168
 	      (setq gnus-tmp-gathered
8159 8169
 		    (nconc (mapcar
8160 8170
 			    (lambda (h) (mail-header-number (car h)))
8161  
-			    (cdr (cdr (car thread))))
  8171
+			    (cddar thread))
8162 8172
 			   gnus-tmp-gathered))
8163  
-	      (setq thread (cons (list (car (car thread))
8164  
-				       (car (cdr (car thread))))
  8173
+	      (setq thread (cons (list (caar thread)
  8174
+				       (cadar thread))
8165 8175
 				 (cdr thread)))
8166 8176
 	      (setq gnus-tmp-level -1
8167 8177
 		    gnus-tmp-false-parent t))
@@ -8170,7 +8180,7 @@ or a straight list of headers."
8170 8180
 	      (setq gnus-tmp-gathered
8171 8181
 		    (nconc (mapcar
8172 8182
 			    (lambda (h) (mail-header-number (car h)))
8173  
-			    (cdr (cdr (car thread))))
  8183
+			    (cddar thread))
8174 8184
 			   gnus-tmp-gathered))
8175 8185
 	      (setq gnus-tmp-level -1))
8176 8186
 	     ((eq gnus-summary-make-false-root 'dummy)
@@ -8204,11 +8214,11 @@ or a straight list of headers."
8204 8214
 	    (setq gnus-tmp-gathered
8205 8215
 		  (nconc (mapcar
8206 8216
 			  (lambda (h) (mail-header-number (car h)))
8207  
-			  (cdr (car thread)))
  8217
+			  (cdar thread))
8208 8218
 			 gnus-tmp-gathered))
8209  
-	    (setq gnus-tmp-new-adopts (if (cdr (car thread))
  8219
+	    (setq gnus-tmp-new-adopts (if (cdar thread)
8210 8220
 					  (append gnus-tmp-new-adopts
8211  
-						  (cdr (car thread)))
  8221
+						  (cdar thread))
8212 8222
 					gnus-tmp-new-adopts)
8213 8223
 		  thread-end t
8214 8224
 		  gnus-tmp-header nil)
@@ -8326,7 +8336,7 @@ or a straight list of headers."
8326 8336
 	(when (nth 1 thread)
8327 8337
 	  (push (cons (max 0 gnus-tmp-level) (nthcdr 1 thread)) stack))
8328 8338
 	(incf gnus-tmp-level)
8329  
-	(setq threads (if thread-end nil (cdr (car thread))))
  8339
+	(setq threads (if thread-end nil (cdar thread)))
8330 8340
 	(unless threads
8331 8341
 	  (setq gnus-tmp-level 0)))))
8332 8342
   (gnus-message 7 "Generating summary...done"))
@@ -8651,15 +8661,20 @@ If READ-ALL is non-nil, all articles in the group are selected."
8651 8661
 	marked m)
8652 8662
     (or (not info)
8653 8663
 	(and (not (setq marked (nthcdr 3 info)))
8654  
-	     (setcdr (nthcdr 2 info)
8655  
-		     (list (list (cons type (gnus-compress-sequence
8656  
-					     articles t))))))
  8664
+	     (or (null articles)
  8665
+		 (setcdr (nthcdr 2 info)
  8666
+			 (list (list (cons type (gnus-compress-sequence
  8667
+						 articles t)))))))
8657 8668
 	(and (not (setq m (assq type (car marked))))
8658  
-	     (setcar marked
8659  
-		     (cons (cons type (gnus-compress-sequence articles t) )
8660  
-			   (car marked))))
  8669
+	     (or (null articles)
  8670
+		 (setcar marked
  8671
+			 (cons (cons type (gnus-compress-sequence articles t) )
  8672
+			       (car marked)))))
8661 8673
 	(if force
8662  
-	    (setcdr m (gnus-compress-sequence articles t))
  8674
+	    (if (null articles)
  8675
+		(setcar (nthcdr 3 info)
  8676
+			(delq (assq type marked) marked))
  8677
+	      (setcdr m (gnus-compress-sequence articles t)))
8663 8678
 	  (setcdr m (gnus-compress-sequence
8664 8679
 		     (sort (nconc (gnus-uncompress-range m)
8665 8680
 				  (copy-sequence articles)) '<) t))))))
@@ -8829,8 +8844,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
8829 8844
 	    (while range
8830 8845
 	      (if (numberp (car range))
8831 8846
 		  (setq num (1+ num))
8832  
-		(setq num (+ num (- (1+ (cdr (car range)))
8833  
-				    (car (car range))))))
  8847
+		(setq num (+ num (- (1+ (cdar range)) (caar range)))))
8834 8848
 	      (setq range (cdr range)))
8835 8849
 	    (setq num (- (cdr active) num))))
8836 8850
 	  ;; Update the number of unread articles.
@@ -9300,7 +9314,9 @@ articles with that subject.  If BACKWARD, search backward instead."
9300 9314
   "Center point in window and redisplay frame.
9301 9315
 Also do horizontal recentering."
9302 9316
   (interactive)
9303  
-  (gnus-horizontal-recenter)
  9317
+  (when (and gnus-auto-center-summary
  9318
+	     (not (eq gnus-auto-center-summary 'vertical)))
  9319
+    (gnus-horizontal-recenter))
9304 9320
   (recenter n))
9305 9321
 
9306 9322
 (defun gnus-summary-recenter ()
@@ -9420,17 +9436,15 @@ displayed, no centering will be performed."
9420 9436
 	  (setq first (1+ (cdr read)))
9421 9437
 	;; `read' is a list of ranges.
9422 9438
 	(if (/= (setq nlast (or (and (numberp (car read)) (car read))
9423  
-				(car (car read)))) 1)
  9439
+				(caar read))) 1)
9424 9440
 	    (setq first 1))
9425 9441
 	(while read
9426 9442
 	  (if first
9427 9443
 	      (while (< first nlast)
9428 9444
 		(setq unread (cons first unread))
9429 9445
 		(setq first (1+ first))))
9430  
-	  (setq first (1+ (if (atom (car read)) (car read) (cdr (car read)))))
9431  
-	  (setq nlast (if (atom (car (cdr read)))
9432  
-			  (car (cdr read))
9433  
-			(car (car (cdr read)))))
  9446
+	  (setq first (1+ (if (atom (car read)) (car read) (cdar read))))
  9447
+	  (setq nlast (if (atom (cadr read)) (cadr read) (caadr read)))
9434 9448
 	  (setq read (cdr read)))))
9435 9449
     ;; And add the last unread articles.
9436 9450
     (while (<= first last)
@@ -10069,7 +10083,7 @@ If BACKWARD, the previous article is selected instead of the next."
10069 10083
 	  (switch-to-buffer gnus-group-buffer)
10070 10084
 	  (and group
10071 10085
 	       (gnus-group-jump-to-group group))
10072  
-	  (eval (car (cdr (assq key keystrokes))))
  10086
+	  (eval (cadr (assq key keystrokes)))
10073 10087
 	  (setq group (gnus-group-group-name))
10074 10088
 	  (switch-to-buffer obuf))
10075 10089
 	(setq ended nil))
@@ -12010,9 +12024,9 @@ even ticked and dormant ones."
12010 12024
     (let ((scored gnus-newsgroup-scored)
12011 12025
 	  headers h)
12012 12026
       (while scored
12013  
-	(or (gnus-summary-goto-subject (car (car scored)))
12014  
-	    (and (setq h (gnus-summary-article-header (car (car scored))))
12015  
-		 (< (cdr (car scored)) gnus-summary-expunge-below)
  12027
+	(or (gnus-summary-goto-subject (caar scored))
  12028
+	    (and (setq h (gnus-summary-article-header (caar scored)))
  12029
+		 (< (cdar scored) gnus-summary-expunge-below)
12016 12030
 		 (setq headers (cons h headers))))
12017 12031
 	(setq scored (cdr scored)))
12018 12032
       (or headers (error "No expunged articles hidden."))
@@ -12690,7 +12704,7 @@ save those articles instead."
12690 12704
 			   (concat prompt " ") split-name nil nil)))
12691 12705
 	      (concat gnus-article-save-directory
12692 12706
 		      (if (string= result "")
12693  
-			  (car (car split-name))
  12707
+			  (caar split-name)
12694 12708
 			result)))))))
12695 12709
     ;; If we have read a directory, we append the default file name.
12696 12710
     (when (file-directory-p file)
@@ -12858,9 +12872,9 @@ is initialized from the SAVEDIR environment variable."
12858 12872
 	  (setq files (list (cdr (assq 'name (car ps)))))
12859 12873
 	  (while (and ps (cdr ps)
12860 12874
 		      (string= (or action "1")
12861  
-			       (or (cdr (assq 'action (car (cdr ps)))) "2")))
12862  
-	    (setq files (cons (cdr (assq 'name (car (cdr ps)))) files))
12863  
-	    (setcdr ps (cdr (cdr ps))))
  12875
+			       (or (cdr (assq 'action (cadr ps))) "2")))
  12876
+	    (setq files (cons (cdr (assq 'name (cadr ps))) files))
  12877
+	    (setcdr ps (cddr ps)))
12864 12878
 	  (if (not files)
12865 12879
 	      ()
12866 12880
 	    (if (not (string-match "%s" action))
@@ -13742,14 +13756,6 @@ always hide."
13742 13756
 	     (nconc (list 'gnus-type 'signature)
13743 13757
 		    gnus-hidden-properties))))))))
13744 13758
 
13745  
-(defvar gnus-signature-limit nil
13746  
-  "Provide a limit to what is considered a signature.