From 7a199c62cfd3aa3417fd9f3b6957dbcf31e37285 Mon Sep 17 00:00:00 2001 From: flyingleafe Date: Sun, 10 Aug 2014 18:18:55 +0600 Subject: Added the Go To Edit Point functionality --- emmet-mode.el | 62 ++++++++++++++++++++++++++++++++++++++++++++++++-------- src/mode-def.el | 63 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 109 insertions(+), 16 deletions(-) diff --git a/emmet-mode.el b/emmet-mode.el index 898ec22..4ce2152 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 "") 'emmet-expand-line) + (define-key map (kbd "") 'emmet-next-edit-point) + (define-key map (kbd "") '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 "") 'emmet-expand-line))) - (defun emmet-after-hook () "Initialize Emmet's buffer-local variables." (if (memq major-mode emmet-css-major-modes) @@ -3839,6 +3839,52 @@ 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 (emmet-go-to-edit-point count) + (error "Last edit point reached."))) + +(defun emmet-prev-edit-point (count) + (interactive "^p") + (unless (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 3324cba..8f37cd5 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 "") 'emmet-expand-line) + (define-key map (kbd "") 'emmet-next-edit-point) + (define-key map (kbd "") '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 "") '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 (emmet-go-to-edit-point count) + (error "Last edit point reached."))) + +;;;###autoload +(defun emmet-prev-edit-point (count) + (interactive "^p") + (unless (emmet-go-to-edit-point (- count)) + (error "First edit point reached."))) + (provide 'emmet-mode) ;;; emmet-mode.el ends here -- cgit v1.2.3 From 8a390aef263dfa23ff28e46ed09c2fd61443175a Mon Sep 17 00:00:00 2001 From: flyingleafe Date: Sun, 10 Aug 2014 18:29:28 +0600 Subject: Documentation for Go to Edit Point --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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. + +- `` is "Previous Edit Point" (`M-x emmet-next-edit-point`) +- `` 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/). -- cgit v1.2.3 From e7c9022c763ee72b665dbf4d3f7f5af6c7341448 Mon Sep 17 00:00:00 2001 From: flyingleafe Date: Sun, 10 Aug 2014 19:32:40 +0600 Subject: Rebuild: forgot about autoload magic comment --- emmet-mode.el | 1 + 1 file changed, 1 insertion(+) diff --git a/emmet-mode.el b/emmet-mode.el index 4ce2152..6c477e6 100644 --- a/emmet-mode.el +++ b/emmet-mode.el @@ -3880,6 +3880,7 @@ accept it or skip it." (unless (emmet-go-to-edit-point count) (error "Last edit point reached."))) +;;;###autoload (defun emmet-prev-edit-point (count) (interactive "^p") (unless (emmet-go-to-edit-point (- count)) -- cgit v1.2.3 From c137e378185a1b9e93fb52358e349a91564e882e Mon Sep 17 00:00:00 2001 From: flyingleafe Date: Sun, 10 Aug 2014 19:49:21 +0600 Subject: Fix: prevent command from firing in css files --- emmet-mode.el | 4 ++-- src/mode-def.el | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/emmet-mode.el b/emmet-mode.el index 6c477e6..1d3f2e4 100644 --- a/emmet-mode.el +++ b/emmet-mode.el @@ -3877,13 +3877,13 @@ accept it or skip it." ;;;###autoload (defun emmet-next-edit-point (count) (interactive "^p") - (unless (emmet-go-to-edit-point count) + (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 (emmet-go-to-edit-point (- count)) + (unless (or emmet-use-css-transform (emmet-go-to-edit-point (- count))) (error "First edit point reached."))) (provide 'emmet-mode) diff --git a/src/mode-def.el b/src/mode-def.el index 8f37cd5..69d5381 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -413,13 +413,13 @@ accept it or skip it." ;;;###autoload (defun emmet-next-edit-point (count) (interactive "^p") - (unless (emmet-go-to-edit-point count) + (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 (emmet-go-to-edit-point (- count)) + (unless (or emmet-use-css-transform (emmet-go-to-edit-point (- count))) (error "First edit point reached."))) (provide 'emmet-mode) -- cgit v1.2.3