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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/web-mode c2f6ce3c86 1/3: Add completion and optional argum


From: ELPA Syncer
Subject: [nongnu] elpa/web-mode c2f6ce3c86 1/3: Add completion and optional arguments to web-mode-attribute-insert
Date: Wed, 10 Aug 2022 10:59:48 -0400 (EDT)

branch: elpa/web-mode
commit c2f6ce3c86bf6265e1d794a467f0b8fdb3181262
Author: Olivia Thiderman <olivia@thiderman.org>
Commit: Olivia Thiderman <olivia@thiderman.org>

    Add completion and optional arguments to web-mode-attribute-insert
    
    This improves it in two ways;
    
    - Allowing it to be called with optional arguments for both the attribute 
and
      the value. This lets users call it with common operations and skip any of 
the
      steps, such as adding common attributes (`class` and `id` come to mind).
    
    - Use `completing-read` with a predetermined set of known and customize-able
      attributes. This helps the user find common attributes faster. It also 
has a
      history, so any new attribute added will be remembered for later access. 
The
      same is added for the value prompt, but it has no predetermined values.
---
 web-mode.el | 47 ++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 3 deletions(-)

diff --git a/web-mode.el b/web-mode.el
index 1f69cefc98..d4914a6e30 100644
--- a/web-mode.el
+++ b/web-mode.el
@@ -357,6 +357,36 @@ See web-mode-block-face."
   :type '(repeat string)
   :group 'web-mode)
 
+(defcustom web-mode-attribute-list
+  '("accept" "accesskey" "action" "alt" "async" "autocomplete" "autofocus"
+    "autoplay" "charset" "checked" "cite" "class" "cols" "colspan" "content"
+    "contenteditable" "controls" "coords" "data" "datetime" "default" "defer"
+    "dir" "dirname" "disabled" "download" "draggable" "enctype" "for" "form"
+    "formaction" "headers" "height" "hidden" "high" "href" "hreflang" "http"
+    "id" "ismap" "kind" "label" "lang" "list" "loop" "low" "max" "maxlength"
+    "media" "method" "min" "multiple" "muted" "name" "novalidate" "onabort"
+    "onafterprint" "onbeforeprint" "onbeforeunload" "onblur" "oncanplay"
+    "oncanplaythrough" "onchange" "onclick" "oncontextmenu" "oncopy"
+    "oncuechange" "oncut" "ondblclick" "ondrag" "ondragend" "ondragenter"
+    "ondragleave" "ondragover" "ondragstart" "ondrop" "ondurationchange"
+    "onemptied" "onended" "onerror" "onfocus" "onhashchange" "oninput"
+    "oninvalid" "onkeydown" "onkeypress" "onkeyup" "onload" "onloadeddata"
+    "onloadedmetadata" "onloadstart" "onmousedown" "onmousemove" "onmouseout"
+    "onmouseover" "onmouseup" "onmousewheel" "onoffline" "ononline"
+    "onpagehide" "onpageshow" "onpaste" "onpause" "onplay" "onplaying"
+    "onpopstate" "onprogress" "onratechange" "onreset" "onresize" "onscroll"
+    "onsearch" "onseeked" "onseeking" "onselect" "onstalled" "onstorage"
+    "onsubmit" "onsuspend" "ontimeupdate" "ontoggle" "onunload"
+    "onvolumechange" "onwaiting" "onwheel" "open" "optimum" "pattern"
+    "placeholder" "poster" "preload" "readonly" "rel" "required" "reversed"
+    "rows" "rowspan" "sandbox" "scope" "selected" "shape" "size" "sizes"
+    "span" "spellcheck" "src" "srcdoc" "srclang" "srcset" "start" "step"
+    "style" "tabindex" "target" "title" "translate" "type" "usemap" "value"
+    "width" "wrap")
+  "HTML attributes used for completion."
+  :type '(repeat string)
+  :group 'web-mode)
+
 ;;---- FACES 
-------------------------------------------------------------------
 
 (defface web-mode-error-face
@@ -877,6 +907,9 @@ Must be used in conjunction with 
web-mode-enable-block-face."
     ("case-extra-offset" . t)
     ))
 
+(defvar web-mode-attribute-history nil)
+(defvar web-mode-attribute-value-history nil)
+
 (defvar web-mode-engines
   '(("angular"          . ("angularjs"))
     ("archibus"         . ())
@@ -11907,19 +11940,27 @@ Prompt user if TAG-NAME isn't provided."
       ;;(message "attrs=%S" attrs)
       )))
 
-(defun web-mode-attribute-insert ()
+(defun web-mode-attribute-insert (&optional attr-name attr-value)
   "Insert an attribute inside current tag."
   (interactive)
   (let (attr attr-name attr-value)
     (cond
      ((not (member (get-text-property (point) 'tag-type) '(start void)))
       (message "attribute-insert ** invalid context **"))
-     ((not (and (setq attr-name (read-from-minibuffer "Attribute name? "))
+     ((not (and (setq attr-name (or attr-name (completing-read
+                                               "Attribute name: "
+                                               (append
+                                                web-mode-attribute-list
+                                                web-mode-attribute-history)
+                                               nil nil nil 
'web-mode-attribute-history)))
                 (> (length attr-name) 0)))
       (message "attribute-insert ** failure **"))
      (t
       (setq attr (concat " " attr-name))
-      (when (setq attr-value (read-from-minibuffer "Attribute value? "))
+      (when (setq attr-value (or attr-value (completing-read
+                                             "Attribute value: "
+                                             web-mode-attribute-value-history
+                                             nil nil nil 
'web-mode-attribute-value-history)))
         (setq attr (concat attr "=\"" attr-value "\"")))
       (web-mode-tag-end)
       (if (looking-back "/>" (point-min))



reply via email to

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