]> git.eshelyaron.com Git - emacs.git/commitdiff
Make TAGS files more portable to MS-Windows
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 25 May 2015 20:06:11 +0000 (13:06 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 25 May 2015 20:22:36 +0000 (13:22 -0700)
* etc/NEWS: Document this.
* lib-src/etags.c (readline_internal) [DOS_NT]:
Don't treat CRs differently from GNUish hosts.
* lisp/progmodes/etags.el (etags-goto-tag-location):
Adjust STARTPOS to account for the skipped CRs in dos-style files.

etc/NEWS
lib-src/etags.c
lisp/progmodes/etags.el

index b922a276e0518e772810ff63bcd23bf5c086e1a9..9f861b293937d4145aa0d88b52512e9961ae9e0c 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -992,6 +992,9 @@ of Windows starting with Windows 9X.
 +++
 ** Emacs running on MS-Windows now supports the daemon mode.
 
+** The byte counts in etags-generated TAGS files are now the same on
+MS-Windows as they are on other platforms.
+
 ** OS X 10.5 or older is no longer supported.
 
 ** OS X on PowerPC is no longer supported.
index f124d290da37a929e4c4299c6e3577b34d245e42..8b7f53c808bb61d61ed10b5db7472fc7961ec0fb 100644 (file)
@@ -6075,16 +6075,7 @@ readline_internal (linebuffer *lbp, FILE *stream, char const *filename)
          if (p > buffer && p[-1] == '\r')
            {
              p -= 1;
-#ifdef DOS_NT
-            /* Assume CRLF->LF translation will be performed by Emacs
-               when loading this file, so CRs won't appear in the buffer.
-               It would be cleaner to compensate within Emacs;
-               however, Emacs does not know how many CRs were deleted
-               before any given point in the file.  */
-             chars_deleted = 1;
-#else
              chars_deleted = 2;
-#endif
            }
          else
            {
index 60ea456d57c64b5a81e9855705f9018dea4cf540..9ff164e15ef4b960d4e787e5ca861d392ec119be 100644 (file)
@@ -1355,9 +1355,16 @@ hits the start of file."
            pat (concat (if (eq selective-display t)
                            "\\(^\\|\^m\\)" "^")
                        (regexp-quote (car tag-info))))
-      ;; The character position in the tags table is 0-origin.
+      ;; The character position in the tags table is 0-origin and counts CRs.
       ;; Convert it to a 1-origin Emacs character position.
-      (if startpos (setq startpos (1+ startpos)))
+      (when startpos
+        (setq startpos (1+ startpos))
+        (when (and line
+                   (eq 1 (coding-system-eol-type buffer-file-coding-system)))
+          ;; Act as if CRs were elided from all preceding lines.
+          ;; Although this doesn't always give exactly the correct position,
+          ;; it does typically improve the guess.
+          (setq startpos (- startpos (1- line)))))
       ;; If no char pos was given, try the given line number.
       (or startpos
          (if line