emacs-elpa-diffs
[Top][All Lists]
Advanced

[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:]_-]+\\)?\\)"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]