diff options
Diffstat (limited to 'src/mode-def.el')
-rw-r--r-- | src/mode-def.el | 67 |
1 files changed, 56 insertions, 11 deletions
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) |