emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 370258f: (eww-process-text-input): Try to keep trac


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master 370258f: (eww-process-text-input): Try to keep track of the size more reliably.
Date: Thu, 27 Nov 2014 19:26:36 +0000

branch: master
commit 370258f7616887a7a0edddda8a09299897f2df70
Author: Lars Magne Ingebrigtsen <address@hidden>
Date:   Thu Nov 27 20:26:24 2014 +0100

    (eww-process-text-input): Try to keep track of the size more reliably.
---
 lisp/ChangeLog  |    1 +
 lisp/net/eww.el |   38 +++++++++++++++++++++++++++-----------
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index a29cad1..3f63669 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -27,6 +27,7 @@
        the history.
        (eww-process-text-input): Fix deletion at the start of the field, too.
        (eww-mode): Revert mistanken removal of `buffer-disable-undo'.
+       (eww-process-text-input): Try to keep track of the size more reliably.
 
        * dom.el (dom-pp): New function.
 
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 3883767..f65403b 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -405,6 +405,7 @@ See the `eww-search-prefix' variable for the search engine 
used."
            (forward-line 1)))))
       (plist-put eww-data :url url)
       (setq eww-history-position 0)
+      (eww-size-text-inputs)
       (eww-update-header-line-format))))
 
 (defun eww-handle-link (dom)
@@ -953,7 +954,7 @@ appears in a <link> or <a> tag."
   "List of input types which represent a text input.
 See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
 
-(defun eww-process-text-input (beg end length)
+(defun eww-process-text-input (beg end replace-length)
   (when-let (pos (and (< (1+ end) (point-max))
                      (> (1- end) (point-min))
                      (cond
@@ -964,24 +965,23 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
     (let* ((form (get-text-property pos 'eww-form))
           (properties (text-properties-at pos))
           (inhibit-read-only t)
+          (length (- end beg replace-length))
           (type (plist-get form :type)))
       (when (and form
                 (member type eww-text-input-types))
        (cond
-        ((zerop length)
+        ((> length 0)
          ;; Delete some space at the end.
          (save-excursion
            (goto-char
             (if (equal type "textarea")
                 (1- (line-end-position))
               (eww-end-of-field)))
-           (let ((new (- end beg)))
-             (while (and (> new 0)
-                         (eql (following-char) ? ))
-               (delete-region (point) (1+ (point)))
-               (setq new (1- new))))
-           (set-text-properties beg end properties)))
-        ((> length 0)
+           (while (and (> length 0)
+                       (eql (following-char) ? ))
+             (delete-region (1- (point)) (point))
+             (cl-decf length))))
+        ((< length 0)
          ;; Add padding.
          (save-excursion
            (goto-char (1- end))
@@ -990,8 +990,11 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
                 (1- (line-end-position))
               (1+ (eww-end-of-field))))
            (let ((start (point)))
-             (insert (make-string length ? ))
-             (set-text-properties start (point) properties)))))
+             (insert (make-string (abs length) ? ))
+             (set-text-properties start (point) properties))
+           (goto-char (1- end)))))
+       (set-text-properties (plist-get form :start) (plist-get form :end)
+                            properties)
        (let ((value (buffer-substring-no-properties
                      (eww-beginning-of-field)
                      (eww-end-of-field))))
@@ -1190,6 +1193,19 @@ See URL 
`https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
        (setq start (next-single-property-change start 'eww-form))))
     (nreverse inputs)))
 
+(defun eww-size-text-inputs ()
+  (let ((start (point-min)))
+    (while (and start
+               (< start (point-max)))
+      (when (or (get-text-property start 'eww-form)
+               (setq start (next-single-property-change start 'eww-form)))
+       (let ((props (get-text-property start 'eww-form)))
+         (plist-put props :start (set-marker (make-marker) start))
+         (setq start (next-single-property-change
+                      start 'eww-form nil (point-max)))
+         (plist-put props
+                    :end (set-marker (make-marker) start)))))))
+
 (defun eww-input-value (input)
   (let ((type (plist-get input :type))
        (value (plist-get input :value)))



reply via email to

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