aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsmihica <smihica@gmail.com>2013-08-06 09:57:24 +0900
committersmihica <smihica@gmail.com>2013-08-06 09:57:24 +0900
commit57b7cf66e209f0811b43c363cbe7ab2ef2de4cca (patch)
tree7de719b5e09bbfd11f7761a265080bc32aa43665 /src
parentde0eb839cfcc02c8ec33aa125bb7851dc87166d6 (diff)
downloademmet-mode-57b7cf66e209f0811b43c363cbe7ab2ef2de4cca.tar.lz
emmet-mode-57b7cf66e209f0811b43c363cbe7ab2ef2de4cca.tar.xz
emmet-mode-57b7cf66e209f0811b43c363cbe7ab2ef2de4cca.zip
Resolved issue #4 "cursor position after expanding".
Diffstat (limited to 'src')
-rw-r--r--src/mode-def.el37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/mode-def.el b/src/mode-def.el
index 07550ae..24ea9ff 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -28,7 +28,7 @@
(replace-regexp-in-string " " tab markup)))))
(defun emmet-transform (input)
- (if (eql major-mode 'css-mode)
+ (if (memq major-mode '(css-mode scss-mode sass-mode))
(emmet-css-transform input)
(emmet-html-transform input)))
@@ -170,9 +170,42 @@ See also `emmet-expand-line'."
(markup (emmet-preview-transformed indent)))
(when markup
(delete-region (line-beginning-position) (overlay-end ovli))
- (emmet-insert-and-flash markup)))))
+ (emmet-insert-and-flash markup)
+ (when (= (elt markup 0) ?<)
+ (let ((p (point)))
+ (goto-char
+ (+ (- p (length markup))
+ (emmet-html-next-insert-point markup)))))))))
(emmet-preview-abort))
+(defun emmet-html-next-insert-point (str)
+ (let ((intag t) (instring nil)
+ (last-c nil) (c nil)
+ (rti 0))
+ (loop for i to (1- (length str)) do
+ (setq last-c c)
+ (setq c (elt str i))
+ (case c
+ (?\" (if (not (= last-c ?\\))
+ (setq instring (not instring))))
+ (?> (if (not instring)
+ (if intag
+ (if (= last-c ?/) (return (1+ i))
+ (progn (setq intag nil)
+ (setq rti (1+ i))))
+ (return i)))) ;; error?
+ (?< (if (and (not instring) (not intag))
+ (setq intag t)))
+ (?/ (if (and intag
+ (not instring)
+ (= last-c ?<))
+ (return rti)))
+ (t
+ (if (memq c '(?\t ?\n ?\r ?\s))
+ (progn (setq c last-c))
+ (if (and (not intag) (not instring))
+ (return rti))))))))
+
(defvar emmet-flash-ovl nil)
(make-variable-buffer-local 'emmet-flash-ovl)