aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsmihica <smihica@gmail.com>2014-08-11 02:32:14 +0900
committersmihica <smihica@gmail.com>2014-08-11 02:32:14 +0900
commitcb7612fd3af4473acf4648e8959758717e81ea31 (patch)
tree56d6bac444c2b73b600d203d891a8e79fad4d165
parent557cb6cd118ec774df977ce1c459ce50ef3bf4b6 (diff)
parent7f23b6fe7272fff65885dd776b682f9fef5107d1 (diff)
downloademmet-mode-cb7612fd3af4473acf4648e8959758717e81ea31.tar.lz
emmet-mode-cb7612fd3af4473acf4648e8959758717e81ea31.tar.xz
emmet-mode-cb7612fd3af4473acf4648e8959758717e81ea31.zip
Merge branch 'flyingleafe-master'
-rw-r--r--README.md15
-rw-r--r--emmet-mode.el63
-rw-r--r--src/mode-def.el63
3 files changed, 125 insertions, 16 deletions
diff --git a/README.md b/README.md
index 4872d71..69211b3 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,10 @@ Zen Coding has been renamed to [Emmet](http://emmet.io/) and includes an expande
- [HTML abbreviations](https://github.com/smihica/emmet#html-abbreviations)
- [CSS abbreviations](https://github.com/smihica/emmet#css-abbreviations)
+## Emmet Actions
+
+- [Go to Edit Point](https://github.com/smihica/emmet#go-to-edit-point)
+
## Installation
### 1. From marmalade or MELPA
@@ -529,3 +533,14 @@ concatenate each property by '+';
border-radius: 2px !important;
* If you want further information, see [Emmet's documentation](http://docs.emmet.io/css-abbreviations/).
+
+## Actions
+
+### Go to Edit Point
+
+Traverse between important code points in HTML.
+
+- `<M-C-left>` is "Previous Edit Point" (`M-x emmet-next-edit-point`)
+- `<M-C-right>` is "Next Edit Point" (`M-x emmet-prev-edit-point`)
+
+For further information and demo see [Emmet's documentation](http://docs.emmet.io/actions/go-to-edit-point/).
diff --git a/emmet-mode.el b/emmet-mode.el
index ac4df58..43d973a 100644
--- a/emmet-mode.el
+++ b/emmet-mode.el
@@ -3558,16 +3558,16 @@ For more information see `emmet-mode'."
(+ (- p (length output-markup))
(emmet-html-next-insert-point output-markup)))))))))))))
-(defvar emmet-mode-keymap nil
+(defvar emmet-mode-keymap
+ (let
+ ((map (make-sparse-keymap)))
+ (define-key map (kbd "C-j") 'emmet-expand-line)
+ (define-key map (kbd "<C-return>") 'emmet-expand-line)
+ (define-key map (kbd "<C-M-right>") 'emmet-next-edit-point)
+ (define-key map (kbd "<C-M-left>") 'emmet-prev-edit-point)
+ map)
"Keymap for emmet minor mode.")
-(if emmet-mode-keymap
- nil
- (progn
- (setq emmet-mode-keymap (make-sparse-keymap))
- (define-key emmet-mode-keymap (kbd "C-j") 'emmet-expand-line)
- (define-key emmet-mode-keymap (kbd "<C-return>") 'emmet-expand-line)))
-
(defun emmet-after-hook ()
"Initialize Emmet's buffer-local variables."
(if (memq major-mode emmet-css-major-modes)
@@ -3839,6 +3839,53 @@ accept it or skip it."
(overlay-put emmet-preview-output 'after-string
(concat show "\n")))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Implementation of "Go to Edit Point" functionality ;;
+;; http://docs.emmet.io/actions/go-to-edit-point/ ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun emmet-go-to-edit-point (count)
+ (let
+ ((buf (buffer-string))
+ (point (point))
+ (edit-point "\\(\\(><\\)\\|\\(^[[:blank:]]+$\\)\\|\\(=\\(\"\\|'\\)\\{2\\}\\)\\)"))
+ (if (> count 0)
+ (progn
+ (forward-char)
+ (let
+ ((search-result (re-search-forward edit-point nil t count)))
+ (if search-result
+ (progn
+ (cond
+ ((or (match-string 2) (match-string 4)) (backward-char))
+ ((match-string 3) (end-of-line)))
+ search-result)
+ (backward-char))))
+ (progn
+ (backward-char)
+ (let
+ ((search-result (re-search-backward edit-point nil t (- count))))
+ (if search-result
+ (progn
+ (cond
+ ((match-string 2) (forward-char))
+ ((match-string 3) (end-of-line))
+ ((match-string 4) (forward-char 2)))
+ search-result)
+ (forward-char)))))))
+
+;;;###autoload
+(defun emmet-next-edit-point (count)
+ (interactive "^p")
+ (unless (or emmet-use-css-transform (emmet-go-to-edit-point count))
+ (error "Last edit point reached.")))
+
+;;;###autoload
+(defun emmet-prev-edit-point (count)
+ (interactive "^p")
+ (unless (or emmet-use-css-transform (emmet-go-to-edit-point (- count)))
+ (error "First edit point reached.")))
+
(provide 'emmet-mode)
;;; emmet-mode.el ends here
diff --git a/src/mode-def.el b/src/mode-def.el
index 913fe58..e84bf96 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -94,16 +94,16 @@ For more information see `emmet-mode'."
(+ (- p (length output-markup))
(emmet-html-next-insert-point output-markup)))))))))))))
-(defvar emmet-mode-keymap nil
+(defvar emmet-mode-keymap
+ (let
+ ((map (make-sparse-keymap)))
+ (define-key map (kbd "C-j") 'emmet-expand-line)
+ (define-key map (kbd "<C-return>") 'emmet-expand-line)
+ (define-key map (kbd "<C-M-right>") 'emmet-next-edit-point)
+ (define-key map (kbd "<C-M-left>") 'emmet-prev-edit-point)
+ map)
"Keymap for emmet minor mode.")
-(if emmet-mode-keymap
- nil
- (progn
- (setq emmet-mode-keymap (make-sparse-keymap))
- (define-key emmet-mode-keymap (kbd "C-j") 'emmet-expand-line)
- (define-key emmet-mode-keymap (kbd "<C-return>") 'emmet-expand-line)))
-
(defun emmet-after-hook ()
"Initialize Emmet's buffer-local variables."
(if (memq major-mode emmet-css-major-modes)
@@ -375,6 +375,53 @@ accept it or skip it."
(overlay-put emmet-preview-output 'after-string
(concat show "\n")))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Implementation of "Go to Edit Point" functionality ;;
+;; http://docs.emmet.io/actions/go-to-edit-point/ ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun emmet-go-to-edit-point (count)
+ (let
+ ((buf (buffer-string))
+ (point (point))
+ (edit-point "\\(\\(><\\)\\|\\(^[[:blank:]]+$\\)\\|\\(=\\(\"\\|'\\)\\{2\\}\\)\\)"))
+ (if (> count 0)
+ (progn
+ (forward-char)
+ (let
+ ((search-result (re-search-forward edit-point nil t count)))
+ (if search-result
+ (progn
+ (cond
+ ((or (match-string 2) (match-string 4)) (backward-char))
+ ((match-string 3) (end-of-line)))
+ search-result)
+ (backward-char))))
+ (progn
+ (backward-char)
+ (let
+ ((search-result (re-search-backward edit-point nil t (- count))))
+ (if search-result
+ (progn
+ (cond
+ ((match-string 2) (forward-char))
+ ((match-string 3) (end-of-line))
+ ((match-string 4) (forward-char 2)))
+ search-result)
+ (forward-char)))))))
+
+;;;###autoload
+(defun emmet-next-edit-point (count)
+ (interactive "^p")
+ (unless (or emmet-use-css-transform (emmet-go-to-edit-point count))
+ (error "Last edit point reached.")))
+
+;;;###autoload
+(defun emmet-prev-edit-point (count)
+ (interactive "^p")
+ (unless (or emmet-use-css-transform (emmet-go-to-edit-point (- count)))
+ (error "First edit point reached.")))
+
(provide 'emmet-mode)
;;; emmet-mode.el ends here