;-*- Mode:LISP; Package:ZWEI; Readtable:ZL; Base:10 -*-

(DEFCOM COM-TAGS-SEARCH-LIST-SECTIONS
	"List sections of files in the tag table containing specified string.
Reads a string in the minibuffer (extended search characters allowed)
and searches the files in the tag table, recording the sections that
contain the string as a list of possibilities to visit." ()
  (LET ((*MINI-BUFFER-DEFAULT-STRING* *ZMACS-TAGS-SEARCH-KEY-STRING*))
    (MULTIPLE-VALUE (*ZMACS-TAGS-SEARCH-FUNCTION* *ZMACS-TAGS-SEARCH-KEY*)
      (GET-EXTENDED-STRING-SEARCH-STRINGS NIL "Tags search (list sections):"
					  *SEARCH-MINI-BUFFER-COMTAB*)))
  (SETQ *ZMACS-TAGS-SEARCH-KEY-STRING*
	(STRING-INTERVAL (WINDOW-INTERVAL (GET-SEARCH-MINI-BUFFER-WINDOW))))
  (LET (NODES)
    (DOLIST (*INTERVAL* (TAG-TABLE-BUFFERS nil))
      (DO ((BP (INTERVAL-FIRST-BP *INTERVAL*)))
	  (())
	(SETQ BP (FUNCALL *ZMACS-TAGS-SEARCH-FUNCTION* BP *ZMACS-TAGS-SEARCH-KEY*))
	(UNLESS BP (RETURN))
	(LET ((NODE (BP-NODE BP)))
	  (PUSH NODE NODES)
	  (SETQ BP (INTERVAL-LAST-BP NODE)))))
    (EDIT-SECTIONS-DISPLAY NODES "~A ~A:" "No ~A ~A found." "Sections containing"
			   *ZMACS-TAGS-SEARCH-KEY-STRING*))
  DIS-NONE)
