emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 004a618 370/433: Fix #23


From: Dmitry Gutov
Subject: [elpa] master 004a618 370/433: Fix #23
Date: Thu, 15 Mar 2018 19:44:38 -0400 (EDT)

branch: master
commit 004a6184e467b7336330702010f74826f0bd526b
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Fix #23
    
    * mmm-erb-scan-erb: Only reject region of type 'open when close-re applies 
at
      the end of the region, this way we're less likely to trip over hashes.
    
    * mmm-submode-changes-in: Only add start and stop when either is not inside
      submode regions. This way `mmm-regions-in' doesn't split regions.
---
 mmm-erb.el    |  6 +++++-
 mmm-region.el | 19 ++++++++++++-------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/mmm-erb.el b/mmm-erb.el
index 86ec45a..fbde445 100644
--- a/mmm-erb.el
+++ b/mmm-erb.el
@@ -202,7 +202,11 @@
         ((and (re-search-forward (concat "\\(?: +do +\\| *{ *\\)"
                                          "\\(?:|[A-Za-z0-9_, ]*|\\)? *")
                                  limit t)
-              (not (re-search-forward mmm-erb-ruby-close-re limit t)))
+              (let ((pt (point)))
+                (not (when (< pt limit)
+                       (goto-char limit)
+                       (skip-syntax-backward "-")
+                       (looking-back mmm-erb-ruby-close-re pt)))))
          'open)))
 
 (defun mmm-erb-scan-ejs (limit)
diff --git a/mmm-region.el b/mmm-region.el
index 384be68..b4c9485 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -694,13 +694,18 @@ region and mode for the previous position."
 (defun mmm-submode-changes-in (start stop)
   "Return a list of all submode-change positions from START to STOP.
 The list is sorted in order of increasing buffer position."
-  (sort (remove-duplicates
-         (list* start stop
-                (mapcan #'(lambda (ovl)
-                            `(,(overlay-start ovl)
-                              ,(overlay-end ovl)))
-                        (mmm-overlays-overlapping start stop))))
-        #'<))
+  (let ((changes (sort (remove-duplicates
+                        (mapcan #'(lambda (ovl)
+                                    `(,(overlay-start ovl)
+                                      ,(overlay-end ovl)))
+                                (mmm-overlays-overlapping start stop)))
+                       #'<)))
+    (when (or (not changes) (< start (car changes)))
+      (push start changes))
+    (let ((last (last changes)))
+      (when (> stop (car last))
+        (setcdr last (list stop))))
+    changes))
 
 (defun mmm-regions-in (start stop)
   "Return a list of regions of the form (MODE BEG END OVL) whose disjoint



reply via email to

[Prev in Thread] Current Thread [Next in Thread]