diff options
author | Dave Mayo <dave_mayo@harvard.edu> | 2018-05-03 15:22:32 -0400 |
---|---|---|
committer | Dave Mayo <dave_mayo@harvard.edu> | 2018-05-03 15:22:32 -0400 |
commit | 4e9797b717e009a2fc67dd4a123f8ed058016bd1 (patch) | |
tree | d4de105b116f11a89a22db4b630cdfa510e0fa1c | |
parent | 7c85cb3135ba6d10ee91cc1b3b310b4e22cbaff4 (diff) | |
download | emmet-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.el | 42 | ||||
-rw-r--r-- | src/mode-def.el | 67 |
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) |