*** pub/rgnus/lisp/gnus-art.el	Tue Jan 28 18:16:57 1997
--- rgnus/lisp/gnus-art.el	Tue Jan 28 22:13:59 1997
***************
*** 1676,1681 ****
--- 1676,1682 ----
      "\C-d" gnus-article-read-summary-keys
      "\M-*" gnus-article-read-summary-keys
      "\M-#" gnus-article-read-summary-keys
+     "\M-^" gnus-article-read-summary-keys
      "\M-g" gnus-article-read-summary-keys)
  
    (substitute-key-definition
*** pub/rgnus/lisp/gnus-group.el	Sun Jan 26 12:08:25 1997
--- rgnus/lisp/gnus-group.el	Tue Jan 28 22:14:00 1997
***************
*** 834,875 ****
      (setq level (car gnus-group-list-mode)
  	  unread (cdr gnus-group-list-mode)))
    (setq level (gnus-group-default-level level))
!   (gnus-group-setup-buffer)		;May call from out of group buffer
    (gnus-update-format-specifications nil 'group 'group-mode)
    (let ((case-fold-search nil)
  	(props (text-properties-at (gnus-point-at-bol)))
! 	(group (gnus-group-group-name)))
      (set-buffer gnus-group-buffer)
!     (funcall gnus-group-prepare-function level unread lowest)
!     (if (zerop (buffer-size))
! 	(gnus-message 5 gnus-no-groups-message)
!       (goto-char (point-max))
!       (when (or (not gnus-group-goto-next-group-function)
! 		(not (funcall gnus-group-goto-next-group-function 
! 			      group props)))
! 	(if (not group)
! 	    ;; Go to the first group with unread articles.
! 	    (gnus-group-search-forward t)
! 	  ;; Find the right group to put point on.  If the current group
! 	  ;; has disappeared in the new listing, try to find the next
! 	  ;; one.	 If no next one can be found, just leave point at the
! 	  ;; first newsgroup in the buffer.
! 	  (when (not (gnus-goto-char
! 		      (text-property-any
! 		       (point-min) (point-max)
! 		       'gnus-group (gnus-intern-safe
! 				    group gnus-active-hashtb))))
! 	    (let ((newsrc (cdddr (gnus-gethash group gnus-newsrc-hashtb))))
! 	      (while (and newsrc
! 			  (not (gnus-goto-char
! 				(text-property-any
! 				 (point-min) (point-max) 'gnus-group
! 				 (gnus-intern-safe
! 				  (caar newsrc) gnus-active-hashtb)))))
! 		(setq newsrc (cdr newsrc)))
! 	      (unless newsrc
! 		(goto-char (point-max))
! 		(forward-line -1))))))
        ;; Adjust cursor point.
        (gnus-group-position-point))))
  
--- 834,885 ----
      (setq level (car gnus-group-list-mode)
  	  unread (cdr gnus-group-list-mode)))
    (setq level (gnus-group-default-level level))
!   (gnus-group-setup-buffer)
    (gnus-update-format-specifications nil 'group 'group-mode)
    (let ((case-fold-search nil)
  	(props (text-properties-at (gnus-point-at-bol)))
! 	(empty (= (point-min) (point-max)))
! 	(group (gnus-group-group-name))
! 	number)
      (set-buffer gnus-group-buffer)
!     (setq number (funcall gnus-group-prepare-function level unread lowest))
!     (when (or (and (numberp number)
! 		   (zerop number))
! 	      (zerop (buffer-size)))
!       ;; No groups in the buffer.
!       (gnus-message 5 gnus-no-groups-message))
!     ;; We have some groups displayed.
!     (goto-char (point-max))
!     (when (or (not gnus-group-goto-next-group-function)
! 	      (not (funcall gnus-group-goto-next-group-function 
! 			    group props)))
!       (cond
!        (empty
! 	(goto-char (point-min)))
!        ((not group)
! 	;; Go to the first group with unread articles.
! 	(gnus-group-search-forward t))
!        (t
! 	;; Find the right group to put point on.  If the current group
! 	;; has disappeared in the new listing, try to find the next
! 	;; one.  If no next one can be found, just leave point at the
! 	;; first newsgroup in the buffer.
! 	(when (not (gnus-goto-char
! 		    (text-property-any
! 		     (point-min) (point-max)
! 		     'gnus-group (gnus-intern-safe
! 				  group gnus-active-hashtb))))
! 	  (let ((newsrc (cdddr (gnus-gethash group gnus-newsrc-hashtb))))
! 	    (while (and newsrc
! 			(not (gnus-goto-char
! 			      (text-property-any
! 			       (point-min) (point-max) 'gnus-group
! 			       (gnus-intern-safe
! 				(caar newsrc) gnus-active-hashtb)))))
! 	      (setq newsrc (cdr newsrc)))
! 	    (unless newsrc
! 	      (goto-char (point-max))
! 	      (forward-line -1))))))
        ;; Adjust cursor point.
        (gnus-group-position-point))))
  
***************
*** 933,939 ****
  
      (gnus-group-set-mode-line)
      (setq gnus-group-list-mode (cons level all))
!     (run-hooks 'gnus-group-prepare-hook)))
  
  (defun gnus-group-prepare-flat-list-dead (groups level mark regexp)
    ;; List zombies and killed lists somewhat faster, which was
--- 943,950 ----
  
      (gnus-group-set-mode-line)
      (setq gnus-group-list-mode (cons level all))
!     (run-hooks 'gnus-group-prepare-hook)
!     t))
  
  (defun gnus-group-prepare-flat-list-dead (groups level mark regexp)
    ;; List zombies and killed lists somewhat faster, which was
***************
*** 1816,1822 ****
        (unless (gnus-check-backend-function
  	       'request-rename-group (gnus-group-group-name))
  	(error "This backend does not support renaming groups"))
!       (read-string "Rename group to: " (gnus-group-group-name)))))
  
    (unless (gnus-check-backend-function 'request-rename-group group)
      (error "This backend does not support renaming groups"))
--- 1827,1833 ----
        (unless (gnus-check-backend-function
  	       'request-rename-group (gnus-group-group-name))
  	(error "This backend does not support renaming groups"))
!       (gnus-read-group "Rename group to: " (gnus-group-group-name)))))
  
    (unless (gnus-check-backend-function 'request-rename-group group)
      (error "This backend does not support renaming groups"))
*** pub/rgnus/lisp/gnus-topic.el	Tue Jan 28 18:16:59 1997
--- rgnus/lisp/gnus-topic.el	Tue Jan 28 22:14:01 1997
***************
*** 371,387 ****
         regexp))
  
      ;; Use topics.
!     (when (< lowest gnus-level-zombie)
!       (if list-topic
! 	  (let ((top (gnus-topic-find-topology list-topic)))
! 	    (gnus-topic-prepare-topic (cdr top) (car top)
! 				      (or topic-level level) all))
! 	(gnus-topic-prepare-topic gnus-topic-topology 0
! 				  (or topic-level level) all))))
! 
!   (gnus-group-set-mode-line)
!   (setq gnus-group-list-mode (cons level all))
!   (run-hooks 'gnus-group-prepare-hook))
  
  (defun gnus-topic-prepare-topic (topicl level &optional list-level all silent)
    "Insert TOPIC into the group buffer.
--- 371,388 ----
         regexp))
  
      ;; Use topics.
!     (prog1
! 	(when (< lowest gnus-level-zombie)
! 	  (if list-topic
! 	      (let ((top (gnus-topic-find-topology list-topic)))
! 		(gnus-topic-prepare-topic (cdr top) (car top)
! 					  (or topic-level level) all))
! 	    (gnus-topic-prepare-topic gnus-topic-topology 0
! 				      (or topic-level level) all)))
!       
!       (gnus-group-set-mode-line)
!       (setq gnus-group-list-mode (cons level all))
!       (run-hooks 'gnus-group-prepare-hook))))
  
  (defun gnus-topic-prepare-topic (topicl level &optional list-level all silent)
    "Insert TOPIC into the group buffer.
***************
*** 743,750 ****
  
  (defun gnus-topic-goto-next-group (group props)
    "Go to group or the next group after group."
!   (if (null group)
!       (gnus-topic-goto-topic (symbol-name (cadr (memq 'gnus-topic props))))
      (if (gnus-group-goto-group group)
  	t
        ;; The group is no longer visible.
--- 744,753 ----
  
  (defun gnus-topic-goto-next-group (group props)
    "Go to group or the next group after group."
!   (if (not group)
!       (if (not (memq 'gnus-topic props))
! 	  (goto-char (point-max))
! 	(gnus-topic-goto-topic (symbol-name (cadr (memq 'gnus-topic props)))))
      (if (gnus-group-goto-group group)
  	t
        ;; The group is no longer visible.
***************
*** 761,769 ****
  		      (not (gnus-group-goto-group (car after))))
  	    (setq after (cdr after))))
  	;; Finally, just put point on the topic.
! 	(unless after
! 	  (gnus-topic-goto-topic (car list))
! 	  (setq after nil))
  	t))))
  
  ;;; Topic-active functions
--- 764,774 ----
  		      (not (gnus-group-goto-group (car after))))
  	    (setq after (cdr after))))
  	;; Finally, just put point on the topic.
! 	(if (not (car list))
! 	    (goto-char (point-min))
! 	  (unless after
! 	    (gnus-topic-goto-topic (car list))
! 	    (setq after nil)))
  	t))))
  
  ;;; Topic-active functions
*** pub/rgnus/lisp/gnus.el	Tue Jan 28 18:16:59 1997
--- rgnus/lisp/gnus.el	Tue Jan 28 22:14:01 1997
***************
*** 154,160 ****
    :link '(custom-manual "(gnus)Various Various")
    :group 'gnus)
  
! (defconst gnus-version-number "5.4.5"
    "Version number for this version of Gnus.")
  
  (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- 154,160 ----
    :link '(custom-manual "(gnus)Various Various")
    :group 'gnus)
  
! (defconst gnus-version-number "5.4.7" 
    "Version number for this version of Gnus.")
  
  (defconst gnus-version (format "Gnus v%s" gnus-version-number)
***************
*** 2384,2390 ****
        (setq valids (cdr valids)))
      outs))
  
! (defun gnus-read-group (prompt)
    "Prompt the user for a group name.
  Disallow illegal group names."
    (let ((prefix "")
--- 2384,2390 ----
        (setq valids (cdr valids)))
      outs))
  
! (defun gnus-read-group (prompt &optional default)
    "Prompt the user for a group name.
  Disallow illegal group names."
    (let ((prefix "")
***************
*** 2393,2399 ****
        (when (string-match
  	     "[: `'\"/]\\|^$"
  	     (setq group (read-string (concat prefix prompt)
! 				      "" 'gnus-group-history)))
  	(setq prefix (format "Illegal group name: \"%s\".  " group)
  	      group nil)))
      group))
--- 2393,2400 ----
        (when (string-match
  	     "[: `'\"/]\\|^$"
  	     (setq group (read-string (concat prefix prompt)
! 				      (or default "")
! 				      'gnus-group-history)))
  	(setq prefix (format "Illegal group name: \"%s\".  " group)
  	      group nil)))
      group))
*** pub/rgnus/lisp/nnmh.el	Thu Jan  9 11:59:32 1997
--- rgnus/lisp/nnmh.el	Tue Jan 28 22:14:02 1997
***************
*** 525,534 ****
  (defun nnmh-deletable-article-p (group article)
    "Say whether ARTICLE in GROUP can be deleted."
    (let ((path (concat nnmh-current-directory (int-to-string article))))
!     (when (file-writable-p path)
!       (or (not nnmail-keep-last-article)
! 	  (not (eq (cdr (nth 1 (assoc group nnmh-group-alist)))
! 		   article))))))
  
  (provide 'nnmh)
  
--- 525,535 ----
  (defun nnmh-deletable-article-p (group article)
    "Say whether ARTICLE in GROUP can be deleted."
    (let ((path (concat nnmh-current-directory (int-to-string article))))
!     ;; Writable.
!     (and (file-writable-p path) 
! 	 ;; We can never delete the last article in the group.
! 	 (not (eq (cdr (nth 1 (assoc group nnmh-group-alist)))
! 		  article)))))
  
  (provide 'nnmh)
  
*** pub/rgnus/lisp/nnweb.el	Thu Jan  9 11:59:31 1997
--- rgnus/lisp/nnweb.el	Tue Jan 28 22:14:02 1997
***************
*** 144,149 ****
--- 144,150 ----
        (when (or (and url
  		     (nnweb-fetch-url url))
  		(and (stringp article)
+ 		     (nnweb-definition 'id t)
  		     (let ((fetch (nnweb-definition 'id))
  			   art)
  		       (when (string-match "^<\\(.*\\)>$" article)
***************
*** 246,255 ****
    "Read the active file."
    (load (nnheader-concat nnweb-directory "active") t t t))
  	   
! (defun nnweb-definition (type)
    "Return the definition of TYPE."
    (let ((def (cdr (assq type (assq nnweb-type nnweb-type-definition)))))
!     (unless def
        (error "Undefined definition %s" type))
      def))
  
--- 247,257 ----
    "Read the active file."
    (load (nnheader-concat nnweb-directory "active") t t t))
  	   
! (defun nnweb-definition (type &optional noerror)
    "Return the definition of TYPE."
    (let ((def (cdr (assq type (assq nnweb-type nnweb-type-definition)))))
!     (when (and (not def)
! 	       (not noerror))
        (error "Undefined definition %s" type))
      def))
  
*** pub/rgnus/lisp/ChangeLog	Tue Jan 28 18:17:00 1997
--- rgnus/lisp/ChangeLog	Tue Jan 28 22:14:03 1997
***************
*** 1,3 ****
--- 1,32 ----
+ Tue Jan 28 22:11:36 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+ 
+ 	* gnus.el: Gnus v5.4.7 is released.
+ 
+ Tue Jan 28 19:48:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+ 
+ 	* nnmh.el (nnmh-deletable-article-p): Never allow deleting the
+ 	last article in the group.
+ 
+ 	* nnweb.el (nnweb-definition): Accept an optional noerror
+ 	argument. 
+ 	(nnweb-request-article): Don't bug out when requesting by MsgId. 
+ 
+ 	* gnus-topic.el (gnus-group-prepare-topics): Return the number of
+ 	unread articles in the buffer.
+ 
+ 	* gnus-group.el (gnus-group-list-groups): On empty buffers, let
+ 	point go to the beginning.
+ 	(gnus-group-list-groups): Give "No news" message when using
+ 	topics. 
+ 
+ 	* gnus-topic.el (gnus-topic-goto-next-group): Let point remain
+ 	at the end of the buffer.
+ 
+ 	* gnus-group.el (gnus-group-rename-group): Check group name
+ 	syntax. 
+ 
+ 	* gnus.el (gnus-read-group): Accept an optional default.
+ 
  Tue Jan 28 18:11:54 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
  
  	* gnus.el: Gnus v5.4.6 is released.
