aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Mayo <dave_mayo@harvard.edu>2018-05-03 15:22:32 -0400
committerDave Mayo <dave_mayo@harvard.edu>2018-05-03 15:22:32 -0400
commit4e9797b717e009a2fc67dd4a123f8ed058016bd1 (patch)
treed4de105b116f11a89a22db4b630cdfa510e0fa1c
parent7c85cb3135ba6d10ee91cc1b3b310b4e22cbaff4 (diff)
downloademmet-mode-4e9797b717e009a2fc67dd4a123f8ed058016bd1.tar.lz
emmet-mode-4e9797b717e009a2fc67dd4a123f8ed058016bd1.tar.xz
emmet-mode-4e9797b717e009a2fc67dd4a123f8ed058016bd1.zip
Moved changes into src, and created config value for postwrap behavior
-rw-r--r--emmet-mode.el42
-rw-r--r--src/mode-def.el67
2 files changed, 81 insertions, 28 deletions
diff --git a/emmet-mode.el b/emmet-mode.el
index 346c6af..5131e82 100644
--- a/emmet-mode.el
+++ b/emmet-mode.el
@@ -305,7 +305,8 @@ For more information see `emmet-mode'."
(emmet-reposition-cursor expr))))))))
(defvar emmet-mode-keymap
- (let ((map (make-sparse-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)
@@ -650,28 +651,29 @@ See `emmet-preview-online'."
(point))
(forward-char)))))))
+(defcustom emmet-postwrap-goto-edit-point f
+ "Goto first edit point after wrapping markup?"
+ :type 'boolean
+ :group 'emmet)
+
;;;###autoload
(defun emmet-wrap-with-markup (wrap-with)
"Wrap region with markup."
(interactive "sExpression to wrap with: ")
(let* ((multi (string-match "\\*$" wrap-with))
- (txt (buffer-substring-no-properties
- (region-beginning) (region-end)))
+ (txt (buffer-substring-no-properties (region-beginning) (region-end)))
(to-wrap (if multi
(split-string txt "\n")
(list txt)))
- (initial-elements
- (replace-regexp-in-string
- "\\(.*\\(\\+\\|>\\)\\)?[^>*]+\\*?[[:digit:]]*$"
- "\\1" wrap-with t))
- (terminal-element
- (replace-regexp-in-string
- "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
- "\\2" wrap-with t))
- (multiplier-expr
- (replace-regexp-in-string
- "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
- "\\3" wrap-with t))
+ (initial-elements (replace-regexp-in-string
+ "\\(.*\\(\\+\\|>\\)\\)?[^>*]+\\*?[[:digit:]]*$"
+ "\\1" wrap-with t))
+ (terminal-element (replace-regexp-in-string
+ "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
+ "\\2" wrap-with t))
+ (multiplier-expr (replace-regexp-in-string
+ "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
+ "\\3" wrap-with t))
(expr (concat
initial-elements
(mapconcat (lambda (el)
@@ -694,7 +696,13 @@ See `emmet-preview-online'."
(when markup
(delete-region (region-beginning) (region-end))
(insert markup)
- (indent-region (region-beginning) (region-end)))))
+ (indent-region (region-beginning) (region-end))
+ (if emmet-postwrap-goto-edit-point
+ (let ((end (region-end)))
+ (goto-char (region-beginning))
+ (unless (ignore-errors (progn (emmet-next-edit-point 1) t))
+ (goto-char end)))
+ ))))
;;;###autoload
(defun emmet-next-edit-point (count)
@@ -4020,7 +4028,7 @@ tbl))
(emmet-join-string
(mapcar
#'(lambda (expr)
- (let*
+ (let*
((hash-map (if emmet-use-sass-syntax emmet-sass-snippets emmet-css-snippets))
(basement
(emmet-aif
diff --git a/src/mode-def.el b/src/mode-def.el
index c0e3e2c..5db7631 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -158,7 +158,7 @@ For more information see `emmet-mode'."
(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)
- (define-key map (kbd "C-c w") 'emmet-wrap-with-markup)
+ (define-key map (kbd "C-c C-c w") 'emmet-wrap-with-markup)
map)
"Keymap for emmet minor mode.")
@@ -190,7 +190,7 @@ This minor mode defines keys for quick access:
Home page URL `http://www.emacswiki.org/emacs/Emmet'.
See also `emmet-expand-line'."
- :lighter " Emmet"
+ :lighter (" Emmet" (:eval (if emmet-preview-mode "[P]" "")))
:keymap emmet-mode-keymap
:after-hook (emmet-after-hook))
@@ -373,6 +373,34 @@ accept it or skip it."
(goto-char here)
(add-hook 'post-command-hook 'emmet-preview-post-command t t)))))
+(defun emmet-preview-online ()
+ "Display `emmet-preview' on the fly as the user types.
+
+To use this, add the function as a local hook:
+
+ (add-hook 'post-self-insert-hook 'emmet-preview-online t t)
+
+or enable `emmet-preview-mode'."
+ (ignore-errors
+ (let* ((expr (emmet-expr-on-line))
+ (text (nth 0 expr))
+ (beg (nth 1 expr))
+ (end (nth 2 expr)))
+ (let ((wap (word-at-point)))
+ (when (and (not (equal wap text))
+ (emmet-transform text))
+ (emmet-preview beg end))))))
+
+(define-minor-mode emmet-preview-mode
+ "When enabled, automatically show `emmet-preview' as the user types.
+
+See `emmet-preview-online'."
+ :init-value nil
+ :group 'emmet
+ (if emmet-preview-mode
+ (add-hook 'post-self-insert-hook 'emmet-preview-online :append :local)
+ (remove-hook 'post-self-insert-hook 'emmet-preview-online :local)))
+
(defvar emmet-preview-pending-abort nil)
(make-variable-buffer-local 'emmet-preview-pending-abort)
@@ -470,6 +498,11 @@ accept it or skip it."
(point))
(forward-char)))))))
+(defcustom emmet-postwrap-goto-edit-point f
+ "Goto first edit point after wrapping markup?"
+ :type 'boolean
+ :group 'emmet)
+
;;;###autoload
(defun emmet-wrap-with-markup (wrap-with)
"Wrap region with markup."
@@ -479,12 +512,23 @@ accept it or skip it."
(to-wrap (if multi
(split-string txt "\n")
(list txt)))
- (initial-elements (replace-regexp-in-string "\\(.*\\(\\+\\|>\\)\\)?[^>*]+\\*?[[:digit:]]*$" "\\1" wrap-with t))
- (terminal-element (replace-regexp-in-string "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$" "\\2" wrap-with t))
- (multiplier-expr (replace-regexp-in-string "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$" "\\3" wrap-with t))
+ (initial-elements (replace-regexp-in-string
+ "\\(.*\\(\\+\\|>\\)\\)?[^>*]+\\*?[[:digit:]]*$"
+ "\\1" wrap-with t))
+ (terminal-element (replace-regexp-in-string
+ "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
+ "\\2" wrap-with t))
+ (multiplier-expr (replace-regexp-in-string
+ "\\(.*>\\)?\\([^>*]+\\)\\(\\*[[:digit:]]+$\\)?\\*?$"
+ "\\3" wrap-with t))
(expr (concat
initial-elements
- (mapconcat (lambda (el) (concat terminal-element "{!!!" (secure-hash 'sha1 el) "!!!}" multiplier-expr))
+ (mapconcat (lambda (el)
+ (concat terminal-element
+ "{!!!"
+ (secure-hash 'sha1 el)
+ "!!!}"
+ multiplier-expr))
to-wrap
"+")))
(markup
@@ -500,11 +544,12 @@ accept it or skip it."
(delete-region (region-beginning) (region-end))
(insert markup)
(indent-region (region-beginning) (region-end))
- (let ((end (region-end)))
- (goto-char (region-beginning))
- (unless (ignore-errors (progn (emmet-next-edit-point 1) t))
- (goto-char end)))
- )))
+ (if emmet-postwrap-goto-edit-point
+ (let ((end (region-end)))
+ (goto-char (region-beginning))
+ (unless (ignore-errors (progn (emmet-next-edit-point 1) t))
+ (goto-char end)))
+ ))))
;;;###autoload
(defun emmet-next-edit-point (count)