changeset 29446:009f1caf830f

Bind case-fold-search to t when searching in case a user sets it to nil in a hook.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 05 Jun 2000 19:22:40 +0000
parents cb3ad8f8f0ed
children 420c1b718335
files lisp/info.el
diffstat 1 files changed, 194 insertions(+), 176 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/info.el	Mon Jun 05 19:21:06 2000 +0000
+++ b/lisp/info.el	Mon Jun 05 19:22:40 2000 +0000
@@ -354,12 +354,12 @@
 ;; The return value is the value of point at the beginning of matching
 ;; REGERXP, if the function succeeds, nil otherwise.
 (defun Info-node-at-bob-matching (regexp)
-  (and (bobp)			; are we at beginning of buffer?
-       (looking-at "\^_")	; does it begin with node delimiter?
+  (and (bobp)				; are we at beginning of buffer?
+       (looking-at "\^_")		; does it begin with node delimiter?
        (let (beg)
 	 (forward-line 1)
 	 (setq beg (point))
-	 (forward-line 1)	; does the line after delimiter match REGEXP?
+	 (forward-line 1)		; does the line after delimiter match REGEXP?
 	 (re-search-backward regexp beg t))))
 
 ;; Go to an info node specified as separate filename and nodename.
@@ -686,6 +686,8 @@
       ;; Look at each of the other buffers one by one.
       (while others
 	(let ((other (car others))
+	      ;; Bind this in case the user sets it to nil.
+	      (case-fold-search t)
 	      this-buffer-nodes)
 	  ;; In each, find all the menus.
 	  (save-excursion
@@ -712,8 +714,9 @@
 	      (setq problems t)
 	      (message "No `top' node in %s" Info-dir-file-name))))
 	(setq others (cdr others)))
-      ;; Add to the main menu a menu item for each other node.
-      (re-search-forward "^\\* Menu:")
+      ;; Add to the main menu a menu item for each other node. 
+      (let ((case-fold-search t)     
+	    (re-search-forward "^\\* Menu:")))
       (forward-line 1)
       (let ((menu-items '("top"))
 	    (nodes nodes)
@@ -734,7 +737,8 @@
       ;; Now take each node of each of the other buffers
       ;; and merge it into the main buffer.
       (while nodes
-	(let ((nodename (car (car nodes))))
+	(let ((case-fold-search t)
+	      (nodename (car (car nodes))))
 	  (goto-char (point-min))
 	  ;; Find the like-named node in the main buffer.
 	  (if (re-search-forward (concat "^\^_.*\n.*Node: "
@@ -817,36 +821,36 @@
   ;; Bind this in case the user sets it to nil.
   (let ((case-fold-search t))
     (save-excursion
-     ;; Find beginning of node.
-     (if (search-backward "\n\^_" nil 'move)
-	 (forward-line 2)
-       (if (looking-at "\^_")
-	   (forward-line 1)
-	 (signal 'search-failed (list "\n\^_"))))
-     ;; Get nodename spelled as it is in the node.
-     (re-search-forward "Node:[ \t]*")
-     (setq Info-current-node
-	   (buffer-substring-no-properties (point)
-					   (progn
-					    (skip-chars-forward "^,\t\n")
-					    (point))))
-     (Info-set-mode-line)
-     ;; Find the end of it, and narrow.
-     (beginning-of-line)
-     (let (active-expression)
-       (narrow-to-region (point)
-			 (if (re-search-forward "\n[\^_\f]" nil t)
-			     (prog1
-			      (1- (point))
-			      (if (looking-at "[\n\^_\f]*execute: ")
-				  (progn
-				    (goto-char (match-end 0))
-				    (setq active-expression
-					  (read (current-buffer))))))
-			   (point-max)))
-       (if Info-enable-active-nodes (eval active-expression))
-       (if Info-fontify (Info-fontify-node))
-       (run-hooks 'Info-selection-hook)))))
+      ;; Find beginning of node.
+      (if (search-backward "\n\^_" nil 'move)
+	  (forward-line 2)
+	(if (looking-at "\^_")
+	    (forward-line 1)
+	  (signal 'search-failed (list "\n\^_"))))
+      ;; Get nodename spelled as it is in the node.
+      (re-search-forward "Node:[ \t]*")
+      (setq Info-current-node
+	    (buffer-substring-no-properties (point)
+					    (progn
+					      (skip-chars-forward "^,\t\n")
+					      (point))))
+      (Info-set-mode-line)
+      ;; Find the end of it, and narrow.
+      (beginning-of-line)
+      (let (active-expression)
+	(narrow-to-region (point)
+			  (if (re-search-forward "\n[\^_\f]" nil t)
+			      (prog1
+				  (1- (point))
+				(if (looking-at "[\n\^_\f]*execute: ")
+				    (progn
+				      (goto-char (match-end 0))
+				      (setq active-expression
+					    (read (current-buffer))))))
+			    (point-max)))
+	(if Info-enable-active-nodes (eval active-expression))
+	(if Info-fontify (Info-fontify-node))
+	(run-hooks 'Info-selection-hook)))))
 
 (defun Info-set-mode-line ()
   (setq mode-line-buffer-identification
@@ -870,8 +874,8 @@
   (interactive (list (Info-read-node-name "Goto node: ") current-prefix-arg))
   (info-initialize)
   (if fork
-    (set-buffer
-     (clone-buffer (concat "*info-" (if (stringp fork) fork nodename) "*") t)))
+      (set-buffer
+       (clone-buffer (concat "*info-" (if (stringp fork) fork nodename) "*") t)))
   (let (filename)
     (string-match "\\s *\\((\\s *\\([^\t)]*\\)\\s *)\\s *\\|\\)\\(.*\\)"
 		  nodename)
@@ -986,7 +990,7 @@
 	    (condition-case err
 		(progn (re-search-forward regexp) (setq found (point)))
 	      (search-failed nil)))))
-      (if (not found) ;can only happen in subfile case -- else would have erred
+      (if (not found)			;can only happen in subfile case -- else would have erred
 	  (unwind-protect
 	      (let ((list ()))
 		(save-excursion
@@ -1025,14 +1029,14 @@
 		       (goto-char opoint)
 		       (Info-select-node)
 		       (set-window-start (selected-window) ostart)))))
-    (widen)
-    (goto-char found)
-    (Info-select-node)
-    ;; Use string-equal, not equal, to ignore text props.
-    (or (and (string-equal onode Info-current-node)
-	     (equal ofile Info-current-file))
-	(setq Info-history (cons (list ofile onode opoint)
-				 Info-history))))))
+      (widen)
+      (goto-char found)
+      (Info-select-node)
+      ;; Use string-equal, not equal, to ignore text props.
+      (or (and (string-equal onode Info-current-node)
+	       (equal ofile Info-current-file))
+	  (setq Info-history (cons (list ofile onode opoint)
+				   Info-history))))))
 
 ;; Extract the value of the node-pointer named NAME.
 ;; If there is none, use ERRORNAME in the error message;
@@ -1220,7 +1224,8 @@
 (defvar Info-complete-menu-buffer)
 
 (defun Info-complete-menu-item (string predicate action)
-  (let ((case-fold-search t))
+  (let ((completion-ignore-case t)
+	(case-fold-search t))
     (cond ((eq action nil)
 	   (let (completions
 		 (pattern (concat "\n\\* +\\("
@@ -1271,7 +1276,8 @@
 	 (default nil)
 	 (p (point))
 	 beg
-	 (last nil))
+	 (last nil)
+	 (case-fold-search t))
      (save-excursion
        (goto-char (point-min))
        (if (not (search-forward "\n* menu:" nil t))
@@ -1290,7 +1296,7 @@
 		      (completing-read (if default
 					   (format "Menu item (default %s): "
 						   default)
-					   "Menu item: ")
+					 "Menu item: ")
 				       'Info-complete-menu-item nil t)))
 	 ;; we rely on the fact that completing-read accepts an input
 	 ;; of "" even when the require-match argument is true and ""
@@ -1298,8 +1304,8 @@
 	 (if (string= item "")
 	     (if default
 		 (setq item default)
-	         ;; ask again
-	         (setq item nil))))
+	       ;; ask again
+	       (setq item nil))))
        (list item current-prefix-arg))))
   ;; there is a problem here in that if several menu items have the same
   ;; name you can only go to the node of the first with this command.
@@ -1309,29 +1315,31 @@
   (setq menu-item (regexp-quote menu-item))
   (let ((case-fold-search t))
     (save-excursion
-      (goto-char (point-min))
-      (or (search-forward "\n* menu:" nil t)
-	  (error "No menu in this node"))
-      (or (re-search-forward (concat "\n\\* +" menu-item ":") nil t)
-	  (re-search-forward (concat "\n\\* +" menu-item) nil t)
-	  (error "No such item in menu"))
-      (beginning-of-line)
-      (forward-char 2)
-      (Info-extract-menu-node-name))))
+      (let ((case-fold-search t))
+	(goto-char (point-min))
+	(or (search-forward "\n* menu:" nil t)
+	    (error "No menu in this node"))
+	(or (re-search-forward (concat "\n\\* +" menu-item ":") nil t)
+	    (re-search-forward (concat "\n\\* +" menu-item) nil t)
+	    (error "No such item in menu"))
+	(beginning-of-line)
+	(forward-char 2)
+	(Info-extract-menu-node-name)))))
 
 ;; If COUNT is nil, use the last item in the menu.
 (defun Info-extract-menu-counting (count)
   (let ((case-fold-search t))
     (save-excursion
-      (goto-char (point-min))
-      (or (search-forward "\n* menu:" nil t)
-	  (error "No menu in this node"))
-      (if count
-	  (or (search-forward "\n* " nil t count)
-	      (error "Too few items in menu"))
-	(while (search-forward "\n* " nil t)
-	  nil))
-      (Info-extract-menu-node-name))))
+      (let ((case-fold-search t))
+	(goto-char (point-min))
+	(or (search-forward "\n* menu:" nil t)
+	    (error "No menu in this node"))
+	(if count
+	    (or (search-forward "\n* " nil t count)
+		(error "Too few items in menu"))
+	  (while (search-forward "\n* " nil t)
+	    nil))
+	(Info-extract-menu-node-name)))))
 
 (defun Info-nth-menu-item ()
   "Go to the node of the Nth menu item.
@@ -1350,7 +1358,8 @@
   "Go to the final node in this file."
   (interactive)
   (Info-goto-node "Top")
-  (let (Info-history)
+  (let ((Info-history nil)
+	(case-fold-search t))
     ;; Go to the last node in the menu of Top.
     (Info-goto-node (Info-extract-menu-counting nil))
     ;; If the last node in the menu is not last in pointer structure,
@@ -1366,36 +1375,38 @@
   (interactive)
   (goto-char (point-min))
   (forward-line 1)
-  ;; three possibilities, in order of priority:
-  ;;     1. next node is in a menu in this node (but not in an index)
-  ;;     2. next node is next at same level
-  ;;     3. next node is up and next
-  (cond ((and (not not-down)
-              (save-excursion (search-forward "\n* menu:" nil t))
-	      (not (string-match "\\<index\\>" Info-current-node)))
-	 (Info-goto-node (Info-extract-menu-counting 1))
-         t)
-        ((save-excursion (search-backward "next:" nil t))
-         (Info-next)
-         t)
-        ((and (save-excursion (search-backward "up:" nil t))
-	      ;; Use string-equal, not equal, to ignore text props.
-	      (not (string-equal (downcase (Info-extract-pointer "up"))
-				 "top")))
-         (let ((old-node Info-current-node))
-           (Info-up)
-           (let (Info-history success)
-             (unwind-protect
-                 (setq success (Info-forward-node t no-error))
-               (or success (Info-goto-node old-node))))))
-        (no-error nil)
-        (t (error "No pointer forward from this node"))))
+  (let ((case-fold-search t))
+    ;; three possibilities, in order of priority:
+    ;;     1. next node is in a menu in this node (but not in an index)
+    ;;     2. next node is next at same level
+    ;;     3. next node is up and next
+    (cond ((and (not not-down)
+		(save-excursion (search-forward "\n* menu:" nil t))
+		(not (string-match "\\<index\\>" Info-current-node)))
+	   (Info-goto-node (Info-extract-menu-counting 1))
+	   t)
+	  ((save-excursion (search-backward "next:" nil t))
+	   (Info-next)
+	   t)
+	  ((and (save-excursion (search-backward "up:" nil t))
+		;; Use string-equal, not equal, to ignore text props.
+		(not (string-equal (downcase (Info-extract-pointer "up"))
+				   "top")))
+	   (let ((old-node Info-current-node))
+	     (Info-up)
+	     (let (Info-history success)
+	       (unwind-protect
+		   (setq success (Info-forward-node t no-error))
+		 (or success (Info-goto-node old-node))))))
+	  (no-error nil)
+	  (t (error "No pointer forward from this node")))))
 
 (defun Info-backward-node ()
   "Go backward one node, considering all nodes as forming one sequence."
   (interactive)
   (let ((prevnode (Info-extract-pointer "prev[ious]*" t))
-	(upnode (Info-extract-pointer "up" t)))
+	(upnode (Info-extract-pointer "up" t))
+	(case-fold-search t))
     (cond ((and upnode (string-match "(" upnode))
 	   (error "First node in file"))
 	  ((and upnode (or (null prevnode)
@@ -1424,12 +1435,14 @@
 
 (defun Info-next-menu-item ()
   (interactive)
-  (let ((node
-	 (save-excursion
-	   (forward-line -1)
-	   (search-forward "\n* menu:" nil t)
-	   (and (search-forward "\n* " nil t)
-		(Info-extract-menu-node-name)))))
+  ;; Bind this in case the user sets it to nil.  
+  (let* ((case-fold-search t)
+	 (node
+	  (save-excursion
+	    (forward-line -1)
+	    (search-forward "\n* menu:" nil t)
+	    (and (search-forward "\n* " nil t)
+		 (Info-extract-menu-node-name)))))
     (if node (Info-goto-node node)
       (error "No more items in menu"))))
 
@@ -1437,9 +1450,11 @@
   (interactive)
   (save-excursion
     (forward-line 1)
-    (let ((beg (save-excursion
-		 (and (search-backward "\n* menu:" nil t)
-		      (point)))))
+    ;; Bind this in case the user sets it to nil.      
+    (let* ((case-fold-search t)
+	   (beg (save-excursion
+		  (and (search-backward "\n* menu:" nil t)
+		       (point)))))
       (or (and beg (search-backward "\n* " beg t))
 	  (error "No previous items in menu")))
     (Info-goto-node (save-excursion
@@ -1491,8 +1506,9 @@
 	 (recenter -1))
 	((Info-no-error (Info-up t))
 	 (goto-char (point-min))
-	 (or (search-forward "\n* Menu:" nil t)
-	     (goto-char (point-max))))
+	 (let ((case-fold-search t))
+	   (or (search-forward "\n* Menu:" nil t)
+	       (goto-char (point-max)))))
 	(t (error "No previous nodes"))))
 
 (defun Info-scroll-up ()
@@ -1510,11 +1526,12 @@
   (if (or (< (window-start) (point-min))
 	  (> (window-start) (point-max)))
       (set-window-start (selected-window) (point)))
-  (let ((virtual-end (save-excursion
-		       (goto-char (point-min))
-		       (if (search-forward "\n* Menu:" nil t)
-			   (point)
-			 (point-max)))))
+  (let* ((case-fold-search t)
+	 (virtual-end (save-excursion
+			(goto-char (point-min))
+			(if (search-forward "\n* Menu:" nil t)
+			    (point)
+			  (point-max)))))
     (if (or (< virtual-end (window-start))
 	    (pos-visible-in-window-p virtual-end))
 	(Info-next-preorder)
@@ -1529,7 +1546,8 @@
   (if (or (< (window-start) (point-min))
 	  (> (window-start) (point-max)))
       (set-window-start (selected-window) (point)))
-  (let* ((current-point (point))
+  (let* ((case-fold-search t)
+	 (current-point (point))
 	 (virtual-end (save-excursion
 			(beginning-of-line)
 			(setq current-point (point))
@@ -1654,7 +1672,7 @@
   (Info-goto-node (nth 1 (car Info-index-alternatives)))
   (if (> (nth 3 (car Info-index-alternatives)) 0)
       (forward-line (nth 3 (car Info-index-alternatives)))
-    (forward-line 3)  ; don't search in headers
+    (forward-line 3)			; don't search in headers
     (let ((name (car (car Info-index-alternatives))))
       (Info-find-index-name name)))
   (message "Found `%s' in %s.  %s"
@@ -1857,36 +1875,36 @@
     (error nil)))
 
 (easy-menu-define Info-mode-menu Info-mode-map
-  "Menu for info files."
-  '("Info"
-    ["Up" Info-up (Info-check-pointer "up")
-     :help "Go up in the Info tree"]
-    ["Next" Info-next (Info-check-pointer "next")
-     :help "Go to the next node"]
-    ["Previous" Info-prev (Info-check-pointer "prev[ious]*")
-     :help "Go to the previous node"]
-    ["Backward" Info-backward-node t
-     :help "Go backward one node, considering all as a sequence"]
-    ["Forward" Info-forward-node t
-     :help "Go forward one node, considering all as a sequence"]
-    ["Top" Info-top-node t
-     :help "Go to top node of file"]
-    ["Final node" Info-final-node t
-     :help "Go to final node in this file"]
-    ("Menu item" ["You should never see this" report-emacs-bug t])
-    ("Reference" ["You should never see this" report-emacs-bug t])
-    ["Search..." Info-search t
-     :help "Search for regular expression in this Info file"]
-    ["Goto node..." Info-goto-node t
-     :help "Go to a named node]"]
-    ["Last" Info-last Info-history
-     :help "Go to the last node you were at"]
-    ("Index..."
-     ["Lookup a String" Info-index t
-      :help "Look for a string in the index items"]
-     ["Next Matching Item" Info-index-next t
-      :help "Look for another occurrence of previous item"])
-    ["Exit" Info-exit t]))
+		  "Menu for info files."
+		  '("Info"
+		    ["Up" Info-up (Info-check-pointer "up")
+		     :help "Go up in the Info tree"]
+		    ["Next" Info-next (Info-check-pointer "next")
+		     :help "Go to the next node"]
+		    ["Previous" Info-prev (Info-check-pointer "prev[ious]*")
+		     :help "Go to the previous node"]
+		    ["Backward" Info-backward-node t
+		     :help "Go backward one node, considering all as a sequence"]
+		    ["Forward" Info-forward-node t
+		     :help "Go forward one node, considering all as a sequence"]
+		    ["Top" Info-top-node t
+		     :help "Go to top node of file"]
+		    ["Final node" Info-final-node t
+		     :help "Go to final node in this file"]
+		    ("Menu item" ["You should never see this" report-emacs-bug t])
+		    ("Reference" ["You should never see this" report-emacs-bug t])
+		    ["Search..." Info-search t
+		     :help "Search for regular expression in this Info file"]
+		    ["Goto node..." Info-goto-node t
+		     :help "Go to a named node]"]
+		    ["Last" Info-last Info-history
+		     :help "Go to the last node you were at"]
+		    ("Index..."
+		     ["Lookup a String" Info-index t
+		      :help "Look for a string in the index items"]
+		     ["Next Matching Item" Info-index-next t
+		      :help "Look for another occurrence of previous item"])
+		    ["Exit" Info-exit t]))
 
 (defvar Info-menu-last-node nil)
 ;; Last node the menu was created for.
@@ -2083,7 +2101,7 @@
       (error "Editing info nodes is not enabled"))
   (Info-edit-mode)
   (message "%s" (substitute-command-keys
-	    "Editing: Type \\<Info-edit-map>\\[Info-cease-edit] to return to info")))
+		 "Editing: Type \\<Info-edit-map>\\[Info-cease-edit] to return to info")))
 
 (defun Info-cease-edit ()
   "Finish editing Info node; switch back to Info proper."
@@ -2149,10 +2167,10 @@
       (setq Info-history (cdr Info-history))
       (goto-char (point-max))
       (while (re-search-backward cmd-desc nil t)
-	  (setq where (cons (list Info-current-file
-				  (match-string-no-properties 1)
-				  0)
-			    where)))
+	(setq where (cons (list Info-current-file
+				(match-string-no-properties 1)
+				0)
+			  where)))
       where)))
 
 ;;;###autoload
@@ -2251,7 +2269,7 @@
 			       'mouse-face 'highlight))))
       (goto-char (point-min))
       (while (re-search-forward "\n\\([^ \t\n].+\\)\n\\(\\*+\\|=+\\|-+\\)$"
-				 nil t)
+				nil t)
 	(let ((c (preceding-char))
 	      face)
 	  (cond ((= c ?*) (setq face 'Info-title-1-face))
@@ -2281,7 +2299,7 @@
 	  (let ((n 0))
 	    (while (re-search-forward "^\\* +\\([^:\t\n]*\\):" nil t)
 	      (setq n (1+ n))
-	      (if (memq n '(5 9))   ; visual aids to help with 1-9 keys
+	      (if (memq n '(5 9))	; visual aids to help with 1-9 keys
 		  (put-text-property (match-beginning 0)
 				     (1+ (match-beginning 0))
 				     'face 'info-menu-5))
@@ -2394,28 +2412,28 @@
 (defun Info-speedbar-goto-node (text node indent)
   "When user clicks on TEXT, goto an info NODE.
 The INDENT level is ignored."
-    (select-frame speedbar-attached-frame)
-    (let* ((buff (or (get-buffer "*info*")
-		     (progn (info) (get-buffer "*info*"))))
-	   (bwin (get-buffer-window buff 0)))
-      (if bwin
-	  (progn
-	    (select-window bwin)
-	    (raise-frame (window-frame bwin)))
-	(if speedbar-power-click
-	    (let ((pop-up-frames t)) (select-window (display-buffer buff)))
-	  (select-frame speedbar-attached-frame)
-	  (switch-to-buffer buff)))
-      (let ((junk (string-match "^(\\([^)]+\\))\\([^.]+\\)$" node))
-	    (file (match-string 1 node))
-	    (node (match-string 2 node)))
-	(Info-find-node file node)
-	;; If we do a find-node, and we were in info mode, restore
-	;; the old default method.  Once we are in info mode, it makes
-	;; sense to return to whatever method the user was using before.
-	(if (string= speedbar-initial-expansion-list-name "Info")
-	    (speedbar-change-initial-expansion-list
-	     speedbar-previously-used-expansion-list-name)))))
+  (select-frame speedbar-attached-frame)
+  (let* ((buff (or (get-buffer "*info*")
+		   (progn (info) (get-buffer "*info*"))))
+	 (bwin (get-buffer-window buff 0)))
+    (if bwin
+	(progn
+	  (select-window bwin)
+	  (raise-frame (window-frame bwin)))
+      (if speedbar-power-click
+	  (let ((pop-up-frames t)) (select-window (display-buffer buff)))
+	(select-frame speedbar-attached-frame)
+	(switch-to-buffer buff)))
+    (let ((junk (string-match "^(\\([^)]+\\))\\([^.]+\\)$" node))
+	  (file (match-string 1 node))
+	  (node (match-string 2 node)))
+      (Info-find-node file node)
+      ;; If we do a find-node, and we were in info mode, restore
+      ;; the old default method.  Once we are in info mode, it makes
+      ;; sense to return to whatever method the user was using before.
+      (if (string= speedbar-initial-expansion-list-name "Info")
+	  (speedbar-change-initial-expansion-list
+	   speedbar-previously-used-expansion-list-name)))))
 
 (defun Info-speedbar-expand-node (text token indent)
   "Expand the node the user clicked on.
@@ -2425,9 +2443,9 @@
   (cond ((string-match "+" text)	;we have to expand this file
 	 (speedbar-change-expand-button-char ?-)
 	 (if (speedbar-with-writable
-	       (save-excursion
-		 (end-of-line) (forward-char 1)
-		 (Info-speedbar-hierarchy-buttons nil (1+ indent) token)))
+	      (save-excursion
+		(end-of-line) (forward-char 1)
+		(Info-speedbar-hierarchy-buttons nil (1+ indent) token)))
 	     (speedbar-change-expand-button-char ?-)
 	   (speedbar-change-expand-button-char ??)))
 	((string-match "-" text)	;we have to contract this node