Function: gnus-subscribe-hierarchical-interactive

gnus-subscribe-hierarchical-interactive is a byte-compiled function defined in gnus-start.el.gz.

Signature

(gnus-subscribe-hierarchical-interactive GROUPS)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-start.el.gz
;; For subscribing new newsgroup

(defun gnus-subscribe-hierarchical-interactive (groups)
  (let ((groups (sort groups #'string<))
	prefixes prefix start ans group starts)
    (while groups
      (setq prefixes (list "^"))
      (while (and groups prefixes)
	(while (not (string-match (car prefixes)
				  (gnus-group-real-name (car groups))))
	  (setq prefixes (cdr prefixes)))
	(setq prefix (car prefixes))
	(setq start (1- (length prefix)))
	(if (and (string-match "[^\\.]\\." (gnus-group-real-name (car groups))
			       start)
		 (cdr groups)
		 (setq prefix
		       (concat "^" (substring
				    (gnus-group-real-name (car groups))
				    0 (match-end 0))))
		 (string-match prefix (gnus-group-real-name (cadr groups))))
	    (progn
	      (push prefix prefixes)
	      (message "Descend hierarchy %s? ([y]nsq): "
		       (substring prefix 1 (1- (length prefix))))
	      (while (not (memq (setq ans (read-char-exclusive))
				'(?y ?\n ?\r ?n ?s ?q)))
		(ding)
		(message "Descend hierarchy %s? ([y]nsq): "
			 (substring prefix 1 (1- (length prefix)))))
	      (cond ((= ans ?n)
		     (dolist (g groups)
		       (when (string-match prefix (gnus-group-real-name g))
			 (push g gnus-killed-list)
			 (puthash g t gnus-killed-hashtb)))
		     (setq starts (cdr starts)))
		    ((= ans ?s)
		     (dolist (g groups)
		       (when (string-match prefix (gnus-group-real-name g))
			 (puthash g t gnus-killed-hashtb)
			 (gnus-subscribe-alphabetically g)))
		     (setq starts (cdr starts)))
		    ((= ans ?q)
		     (dolist (g groups)
		       (push g gnus-killed-list)
		       (puthash g t gnus-killed-hashtb)))
		    (t nil)))
	  (message "Subscribe %s? ([n]yq)" (car groups))
	  (while (not (memq (setq ans (read-char-exclusive))
			    '(?y ?\n ?\r ?q ?n)))
	    (ding)
	    (message "Subscribe %s? ([n]yq)" (car groups)))
	  (setq group (car groups))
	  (cond ((= ans ?y)
		 (gnus-subscribe-alphabetically (car groups))
		 (puthash group t gnus-killed-hashtb))
		((= ans ?q)
		 (dolist (g groups)
		   (push g gnus-killed-list)
		   (puthash g t gnus-killed-hashtb)))
		(t
		 (push group gnus-killed-list)
		 (puthash group t gnus-killed-hashtb)))
	  (setq groups (cdr groups)))))))