XEmacs 21.2.33 "Melpomene".
[chise/xemacs-chise.git.1] / lisp / etags.el
index 3414298..c3245d7 100644 (file)
@@ -190,9 +190,12 @@ the current buffer."
       (when (file-readable-p parent-tag-file)
        (push parent-tag-file result)))
     ;; tag-table-alist
-    (let ((key (or buffer-file-name
-                  (concat default-directory (buffer-name))))
-         expression)
+    (let* ((key (or buffer-file-name
+                   (concat default-directory (buffer-name))))
+          (key (if (eq system-type 'windows-nt)
+                   (replace-in-string key "\\\\" "/")
+                 key))
+          expression)
       (dolist (item tag-table-alist)
        (setq expression (car item))
        ;; If the car of the alist item is a string, apply it as a regexp
@@ -638,7 +641,7 @@ If it returns non-nil, this file needs processing by evalling
          (t
           (setq tag-table-currently-matching-exact t)))
     ;; \_ in the tagname is used to indicate a symbol boundary.
-    (setq exact-tagname (concat "\\_" tagname "\\_"))
+    (setq exact-tagname (format "\C-?\\_%s\\_\C-a\\|\\_%s\\_" tagname tagname))
     (while (string-match "\\\\_" exact-tagname)
       (aset exact-tagname (1- (match-end 0)) ?b))
     (save-excursion
@@ -671,7 +674,9 @@ If it returns non-nil, this file needs processing by evalling
                ;; tag searches?
                (while (re-search-forward tag-target nil t)
                  (and (save-match-data
-                        (looking-at "[^\n\C-?]*\C-?"))
+                        (save-excursion
+                          (goto-char (match-beginning 0))
+                          (looking-at "[^\n\C-?]*\C-?")))
                       ;; If we're looking for inexact matches, skip
                       ;; exact matches since we've visited them
                       ;; already.
@@ -690,6 +695,7 @@ If it returns non-nil, this file needs processing by evalling
               (if next "more " "")
               (if exact "matching" "containing")
               tagname))
+      (beginning-of-line)
       (search-forward "\C-?")
       (setq file (expand-file-name (file-of-tag)
                                   ;; In XEmacs, this needs to be
@@ -732,6 +738,16 @@ If it returns non-nil, this file needs processing by evalling
       (cons buf startpos))))
 
 ;;;###autoload
+(defun find-tag-at-point (tagname &optional other-window)
+  "*Find tag whose name contains TAGNAME.
+Identical to `find-tag' but does not prompt for tag when called interactively;
+instead, uses tag around or before point."
+  (interactive (if current-prefix-arg
+                  '(nil nil)
+                (list (find-tag-default) nil)))
+  (find-tag tagname other-window))
+
+;;;###autoload
 (defun find-tag (tagname &optional other-window)
   "*Find tag whose name contains TAGNAME.
  Selects the buffer that the tag is contained in
@@ -768,7 +784,7 @@ Variables of note:
                       '(find-tag find-tag-other-window tags-loop-continue))))
        (push-tag-mark))
     (if other-window
-       (pop-to-buffer tag-buf)
+       (pop-to-buffer tag-buf t)
       (switch-to-buffer tag-buf))
     (widen)
     (push-mark)
@@ -784,7 +800,7 @@ Variables of note:
 
 ;;;###autoload
 (defun find-tag-other-window (tagname &optional next)
-  "*Find tag whose name contains TAGNAME.
+  "*Find tag whose name contains TAGNAME, in another window.
  Selects the buffer that the tag is contained in in another window
 and puts point at its definition.
  If TAGNAME is a null string, the expression in the buffer