]> code.delx.au - gnu-emacs/commitdiff
* newcomment.el (comment-search-backward): Stricter in finding
authorLeo Liu <sdl.web@gmail.com>
Fri, 17 May 2013 22:46:10 +0000 (06:46 +0800)
committerLeo Liu <sdl.web@gmail.com>
Fri, 17 May 2013 22:46:10 +0000 (06:46 +0800)
comment start.

* progmodes/octave.el (octave-comment-start): Remove the SPC char.
(octave-comment-start-skip): Properly anchored.

Fixes: debbugs:14303
lisp/ChangeLog
lisp/newcomment.el
lisp/progmodes/octave.el

index 12ae5239f137a4e1fe228e45c356b0f89adf734e..f07354cfe5dc7cafa7a1c2b2ebed2099246551b4 100644 (file)
@@ -1,3 +1,11 @@
+2013-05-17  Leo Liu  <sdl.web@gmail.com>
+
+       * newcomment.el (comment-search-backward): Stricter in finding
+       comment start.  (Bug#14303)
+
+       * progmodes/octave.el (octave-comment-start): Remove the SPC char.
+       (octave-comment-start-skip): Properly anchored.
+
 2013-05-17  Leo Liu  <sdl.web@gmail.com>
 
        * emacs-lisp/smie.el (smie-highlight-matching-block-mode): Clean
index bcb5f721ae81706da0d7f13980b7da47f9b14e57..e10b96f97f9d77bdc6d274c8bef12e302801bee8 100644 (file)
@@ -485,27 +485,29 @@ and raises an error or returns nil if NOERROR is non-nil."
 Moves point to inside the comment and returns the position of the
 comment-starter.  If no comment is found, moves point to LIMIT
 and raises an error or returns nil if NOERROR is non-nil."
-  ;; FIXME: If a comment-start appears inside a comment, we may erroneously
-  ;; stop there.  This can be rather bad in general, but since
-  ;; comment-search-backward is only used to find the comment-column (in
-  ;; comment-set-column) and to find the comment-start string (via
-  ;; comment-beginning) in indent-new-comment-line, it should be harmless.
-  (if (not (re-search-backward comment-start-skip limit t))
-      (unless noerror (error "No comment"))
-    (beginning-of-line)
-    (let* ((end (match-end 0))
-          (cs (comment-search-forward end t))
-          (pt (point)))
-      (if (not cs)
-         (progn (beginning-of-line)
-                (comment-search-backward limit noerror))
-       (while (progn (goto-char cs)
-                     (comment-forward)
-                     (and (< (point) end)
-                          (setq cs (comment-search-forward end t))))
-         (setq pt (point)))
-       (goto-char pt)
-       cs))))
+  (let (found end)
+    (while (and (not found)
+               (re-search-backward comment-start-skip limit t))
+      (setq end (match-end 0))
+      (unless (and comment-use-syntax
+                  (nth 8 (syntax-ppss (or (match-end 1)
+                                          (match-beginning 0)))))
+       (setq found t)))
+    (if (not found)
+       (unless noerror (error "No comment"))
+      (beginning-of-line)
+      (let ((cs (comment-search-forward end t))
+           (pt (point)))
+       (if (not cs)
+           (progn (beginning-of-line)
+                  (comment-search-backward limit noerror))
+         (while (progn (goto-char cs)
+                       (comment-forward)
+                       (and (< (point) end)
+                            (setq cs (comment-search-forward end t))))
+           (setq pt (point)))
+         (goto-char pt)
+         cs)))))
 
 (defun comment-beginning ()
   "Find the beginning of the enclosing comment.
index 451ac2791a7a0562d217540950a404bca4214d8e..26fb254af5fc3befb9a494c8d5288aad64520bb0 100644 (file)
@@ -62,12 +62,11 @@ Used in `octave-mode' and `inferior-octave-mode' buffers.")
 (defvar octave-comment-char ?#
   "Character to start an Octave comment.")
 
-(defvar octave-comment-start
-  (string octave-comment-char ?\s)
-  "String to insert to start a new Octave in-line comment.")
+(defvar octave-comment-start (char-to-string octave-comment-char)
+  "Octave-specific `comment-start' (which see).")
 
-(defvar octave-comment-start-skip "\\(?:%!\\|\\s<+\\)\\s-*"
-  "Regexp to match the start of an Octave comment up to its body.")
+(defvar octave-comment-start-skip "\\(^\\|\\S<\\)\\(?:%!\\|\\s<+\\)\\s-*"
+  "Octave-specific `comment-start-skip' (which see).")
 
 (defvar octave-begin-keywords
   '("classdef" "do" "enumeration" "events" "for" "function" "if" "methods"