branch: master
commit 004a6184e467b7336330702010f74826f0bd526b
Author: Dmitry Gutov <[email protected]>
Commit: Dmitry Gutov <[email protected]>
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