[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/web-mode 7ae48dec23 2/3: Add completion for element tags
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/web-mode 7ae48dec23 2/3: Add completion for element tags |
Date: |
Wed, 10 Aug 2022 10:59:49 -0400 (EDT) |
branch: elpa/web-mode
commit 7ae48dec234b5e6f6c4ec84d313629b501ef87f0
Author: Olivia Thiderman <olivia@thiderman.org>
Commit: Olivia Thiderman <olivia@thiderman.org>
Add completion for element tags
Use `completing-read` with a predetermined set of known and customize-able
tags.
This helps the user find common tags faster. It also has a history, so any
new
tag added will be remembered for later access.
---
web-mode.el | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/web-mode.el b/web-mode.el
index d4914a6e30..81c05d576b 100644
--- a/web-mode.el
+++ b/web-mode.el
@@ -357,6 +357,27 @@ See web-mode-block-face."
:type '(repeat string)
:group 'web-mode)
+;; https://developer.mozilla.org/en-US/docs/Web/HTML/Element
+(defcustom web-mode-tag-list
+ '("html" "base" "head" "link" "meta" "style" "title" "body" "address"
+ "article" "aside" "footer" "header" "h1" "h2" "h3" "h4" "h5" "h6" "main"
+ "nav" "section" "blockquote" "dd" "div" "dl" "dt" "figcaption" "figure"
+ "hr" "li" "menu" "ol" "p" "pre" "ula" "a" "abbr" "b" "bdi" "bdo" "br"
+ "cite" "code" "data" "dfn" "em" "i" "kbdmark" "q" "rp" "rt" "ruby" "s"
+ "samp" "small" "span" "strong" "sub" "sup" "time" "u" "var" "wbr" "area"
+ "audio" "img" "map" "track" "video" "embed" "iframe" "object" "picture"
+ "portal" "source" "svg" "math" "canvas" "noscript" "script" "del" "ins"
+ "caption" "col" "colgroup" "table" "tbody" "td" "tfoot" "th" "thead" "tr"
+ "button" "datalist" "fieldset" "form" "input" "label" "legend" "meter"
+ "optgroup" "option" "output" "progress" "select" "textarea" "details"
+ "dialog" "summary" "slot" "template")
+ "HTML tags used for completion."
+ :type '(repeat string)
+ :group 'web-mode)
+
+
+;; https://www.w3schools.com/tags/ref_attributes.asp
+;; Attributes marked as deprecated in HTML 5 are not added.
(defcustom web-mode-attribute-list
'("accept" "accesskey" "action" "alt" "async" "autocomplete" "autofocus"
"autoplay" "charset" "checked" "cite" "class" "cols" "colspan" "content"
@@ -907,6 +928,7 @@ Must be used in conjunction with
web-mode-enable-block-face."
("case-extra-offset" . t)
))
+(defvar web-mode-tag-history nil)
(defvar web-mode-attribute-history nil)
(defvar web-mode-attribute-value-history nil)
@@ -10402,7 +10424,7 @@ Pos should be in a tag."
(let (beg end line-beg line-end pos tag tag-start tag-end)
(save-excursion
(combine-after-change-calls
- (setq tag (read-from-minibuffer "Tag name? ")
+ (setq tag (web-mode-element-complete)
tag-start (concat "<" tag ">")
tag-end (concat "</" tag ">")
pos (point)
@@ -10453,13 +10475,22 @@ Pos should be in a tag."
) ;let
)
+(defun web-mode-element-complete (&optional prompt)
+ "Completes for an element tag."
+ (completing-read
+ (or prompt "Tag name: ")
+ (append
+ web-mode-tag-list
+ web-mode-tag-history)
+ nil nil nil 'web-mode-tag-history))
+
(defun web-mode-element-wrap (&optional tag-name)
"Wrap current REGION with start and end tags.
Prompt user if TAG-NAME isn't provided."
(interactive)
(let (beg end pos tag sep)
(save-excursion
- (setq tag (or tag-name (read-from-minibuffer "Tag name? ")))
+ (setq tag (or tag-name (web-mode-element-complete)))
(setq pos (point))
(cond
(mark-active
@@ -10569,7 +10600,7 @@ Prompt user if TAG-NAME isn't provided."
((and (get-text-property (point) 'tag-type)
(not (get-text-property (point) 'tag-beg)))
(message "element-insert ** invalid context **"))
- ((not (and (setq tag-name (read-from-minibuffer "Tag name? "))
+ ((not (and (setq tag-name (web-mode-element-complete))
(> (length tag-name) 0)))
(message "element-insert ** failure **"))
((web-mode-element-is-void tag-name)
@@ -10619,7 +10650,7 @@ Prompt user if TAG-NAME isn't provided."
(interactive)
(save-excursion
(let (pos)
- (unless tag-name (setq tag-name (read-from-minibuffer "New tag name? ")))
+ (unless tag-name (setq tag-name (web-mode-element-complete "New tag
name: ")))
(when (and (> (length tag-name) 0)
(web-mode-element-beginning)
(looking-at "<\\([[:alnum:]]+\\(:?[[:alpha:]_-]+\\)?\\)"))