[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 0cb75f0 299/433: Correctly restore pre-indent position
From: |
Dmitry Gutov |
Subject: |
[elpa] master 0cb75f0 299/433: Correctly restore pre-indent position |
Date: |
Thu, 15 Mar 2018 19:44:24 -0400 (EDT) |
branch: master
commit 0cb75f066b06b20c5fc6f0b0281e7a3f9c403193
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Correctly restore pre-indent position
---
mmm-erb.el | 86 ++++++++++++++++++++++++++++++--------------------------------
1 file changed, 42 insertions(+), 44 deletions(-)
diff --git a/mmm-erb.el b/mmm-erb.el
index b1e71ca..dc366d3 100644
--- a/mmm-erb.el
+++ b/mmm-erb.el
@@ -64,12 +64,15 @@
(defun mmm-erb-indent-line ()
(interactive)
- (mmm-update-submode-region)
- (if (and mmm-current-overlay mmm-current-submode
- (< (overlay-start mmm-current-overlay) (point-at-bol)))
- ;; Region starts before the current line (hence, contains indentation).
- (mmm-erb-indent-line-submode)
- (mmm-erb-indent-line-primary)))
+ (let ((offset (- (current-column) (current-indentation))))
+ (back-to-indentation)
+ (mmm-update-submode-region)
+ (if (and mmm-current-overlay mmm-current-submode
+ (< (overlay-start mmm-current-overlay) (point-at-bol)))
+ ;; Region starts before the current line (and contains indentation).
+ (mmm-erb-indent-line-submode)
+ (mmm-erb-indent-line-primary))
+ (when (> offset 0) (forward-char offset))))
(defun mmm-erb-indent-line-submode ()
(let (added-whitespace)
@@ -100,51 +103,46 @@
(mmm-erb-indent-offset mmm-primary-mode))))))
(defun mmm-erb-indent-to-region-start (&optional additional-offset)
- (let* ((indent (current-indentation))
- (offset (- (current-column) indent)))
+ (let ((indent (current-indentation)))
(indent-line-to
(save-excursion
(goto-char (1- (overlay-start mmm-current-overlay)))
(+ (current-indentation)
- (or additional-offset 0))))
- (when (> offset 0) (forward-char offset))))
+ (or additional-offset 0))))))
(defun mmm-erb-indent-line-primary ()
- (save-excursion
- (let* ((here (point))
- ;; Before previous line's tag.
- (start (progn (forward-line -1)
- (back-to-indentation)
- (let ((lcon (sgml-lexical-context)))
- (when (eq (car lcon) 'tag)
- ;; Tag spreads several lines.
- (goto-char (cdr lcon))
- (back-to-indentation)))
- (point)))
- (regions (mmm-regions-in start here))
- (offset (- (current-column) (current-indentation)))
- (n 0))
- ;; Collect indent modifier depending on type of tags.
- (loop for region in regions
+ (let* ((here (point))
+ ;; Go before previous line's tag.
+ (start (progn (forward-line -1)
+ (back-to-indentation)
+ (let ((lcon (sgml-lexical-context)))
+ (when (eq (car lcon) 'tag)
+ ;; Tag spreads several lines.
+ (goto-char (cdr lcon))
+ (back-to-indentation)))
+ (point)))
+ (regions (mmm-regions-in start here))
+ (n 0))
+ ;; Collect indent modifier depending on type of tags.
+ (loop for region in regions
+ for type = (mmm-erb-scan-region region)
+ when type do
+ (if (eq type 'close)
+ (when (plusp n) (decf n))
+ (incf n (if (eq type 'close) 0 1))))
+ (let ((eol (progn (goto-char here) (end-of-line 1) (point))))
+ ;; There can be primary mode regions in the list, so we loop.
+ ;; Look for "else" and "end" instructions.
+ ;; If a block start instruction comes first, don't adjust modifier.
+ (loop for region in (mmm-regions-in here eol)
for type = (mmm-erb-scan-region region)
- when type do
- (if (eq type 'close)
- (when (plusp n) (decf n))
- (incf n (if (eq type 'close) 0 1))))
- (let ((eol (progn (goto-char here) (end-of-line 1) (point))))
- ;; There can be primary mode regions in the list, so we loop.
- ;; Look for "else" and "end" instructions.
- ;; If a block start instruction comes first, don't adjust modifier.
- (loop for region in (mmm-regions-in here eol)
- for type = (mmm-erb-scan-region region)
- until (eq type 'open)
- when (memq type '(middle close)) do (decf n)))
- (goto-char here)
- (funcall (mmm-erb-orig-indent-function mmm-primary-mode))
- (let* ((indent (current-indentation))
- (indent-step (mmm-erb-indent-offset mmm-primary-mode)))
- (indent-line-to (+ indent (if n (* indent-step n) 0)))
- (when (> offset 0) (forward-char offset))))))
+ until (eq type 'open)
+ when (memq type '(middle close)) do (decf n)))
+ (goto-char here)
+ (funcall (mmm-erb-orig-indent-function mmm-primary-mode))
+ (let* ((indent (current-indentation))
+ (indent-step (mmm-erb-indent-offset mmm-primary-mode)))
+ (indent-line-to (+ indent (if n (* indent-step n) 0))))))
(defun mmm-erb-scan-region (region)
(when region ; Can be nil if a line is empty, for example.
- [elpa] master a7b8c55 296/433: Do syntax highlighting and indentation in ERB buffers, (continued)
- [elpa] master a7b8c55 296/433: Do syntax highlighting and indentation in ERB buffers, Dmitry Gutov, 2018/03/15
- [elpa] master 37f9a4b 183/433: Released 0.4.6, Dmitry Gutov, 2018/03/15
- [elpa] master 1e46c43 306/433: Fix #8, Dmitry Gutov, 2018/03/15
- [elpa] master ed0b781 310/433: Merge pull request #9 from dgutov/master, Dmitry Gutov, 2018/03/15
- [elpa] master e5fe9e7 261/433: Implemented a 'local to submode class' keymap binding, using a dummy overlay., Dmitry Gutov, 2018/03/15
- [elpa] master 955038c 302/433: Merge remote-tracking branch 'refs/remotes/dgutov/erb', Dmitry Gutov, 2018/03/15
- [elpa] master 7f9dbdb 292/433: Fix `mmm-insert-region' to not abort loop too soon, Dmitry Gutov, 2018/03/15
- [elpa] master 5289a0b 318/433: Save values of more cc-mode variables, Dmitry Gutov, 2018/03/15
- [elpa] master 034df4b 339/433: Revert c548593, for easier optimization, Dmitry Gutov, 2018/03/15
- [elpa] master e10b20f 347/433: Remove the angle brackets, Dmitry Gutov, 2018/03/15
- [elpa] master 0cb75f0 299/433: Correctly restore pre-indent position,
Dmitry Gutov <=
- [elpa] master 9674355 328/433: Merge pull request #18 from prakashk/master, Dmitry Gutov, 2018/03/15
- [elpa] master 05a787e 291/433: Fix further compilation warnings in recent Emacsen, Dmitry Gutov, 2018/03/15
- [elpa] master e269a47 305/433: Require 'mmm-region from 'mmm-erb, avoiding compilation warnings about free variable references, Dmitry Gutov, 2018/03/15
- [elpa] master 961a127 263/433: Prevent bounds from going outside buffer (XEmacs complains), Dmitry Gutov, 2018/03/15
- [elpa] master 66b47cd 218/433: Released 0.4.7, Dmitry Gutov, 2018/03/15
- [elpa] master 07b35d4 250/433: Added mmm-noweb to autoload (Joe Kelsey), Dmitry Gutov, 2018/03/15
- [elpa] master b554efb 287/433: After fontifying the region, restore local vars, Dmitry Gutov, 2018/03/15
- [elpa] master 0922481 254/433: Added narrow to submode region (Joe Kelsey), Dmitry Gutov, 2018/03/15
- [elpa] master b72e44c 369/433: Released 0.5.1, Dmitry Gutov, 2018/03/15
- [elpa] master bcc5adf 351/433: Define mmm-indent-line-function and its default value, Dmitry Gutov, 2018/03/15