mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Use a popup menu for <select>s in eww
* lisp/net/eww.el (eww-change-select): Use a popup menu for the select (bug#43218). (eww--form-items): New utility function. (eww-select-map): Allow using a mouse to click on select buttons.
This commit is contained in:
parent
b2f41a8a18
commit
3444f397c7
1 changed files with 25 additions and 19 deletions
|
|
@ -1134,6 +1134,8 @@ just re-display the HTML already fetched."
|
|||
(defvar eww-select-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "\r" 'eww-change-select)
|
||||
(define-key map [follow-link] 'mouse-face)
|
||||
(define-key map [mouse-2] 'eww-change-select)
|
||||
(define-key map [(control c) (control c)] 'eww-submit)
|
||||
map))
|
||||
|
||||
|
|
@ -1436,26 +1438,30 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
|
|||
(setq display (plist-get (cdr elem) :display))))
|
||||
display))
|
||||
|
||||
(defun eww-change-select ()
|
||||
(defun eww--form-items (form)
|
||||
(cl-loop for elem in form
|
||||
when (and (consp elem)
|
||||
(eq (car elem) 'item))
|
||||
collect (cdr elem)))
|
||||
|
||||
(defun eww-change-select (event)
|
||||
"Change the value of the select drop-down menu under point."
|
||||
(interactive)
|
||||
(let* ((input (get-text-property (point) 'eww-form))
|
||||
(completion-ignore-case t)
|
||||
(options
|
||||
(delq nil
|
||||
(mapcar (lambda (elem)
|
||||
(and (consp elem)
|
||||
(eq (car elem) 'item)
|
||||
(cons (plist-get (cdr elem) :display)
|
||||
(plist-get (cdr elem) :value))))
|
||||
input)))
|
||||
(display (completing-read "Change value: " options nil 'require-match))
|
||||
(inhibit-read-only t))
|
||||
;; If the user doesn't enter anything, don't change anything.
|
||||
(when (> (length display) 0)
|
||||
(plist-put input :value (cdr (assoc-string display options t)))
|
||||
(goto-char
|
||||
(eww-update-field display)))))
|
||||
(interactive (list last-nonmenu-event))
|
||||
(mouse-set-point event)
|
||||
(let ((input (get-text-property (point) 'eww-form)))
|
||||
(popup-menu
|
||||
(cons
|
||||
"Change Value"
|
||||
(mapcar
|
||||
(lambda (elem)
|
||||
(vector (plist-get elem :display)
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(plist-put input :value (plist-get elem :value))
|
||||
(goto-char (eww-update-field (plist-get elem :display))))
|
||||
t))
|
||||
(eww--form-items input)))
|
||||
event)))
|
||||
|
||||
(defun eww-update-field (string &optional offset)
|
||||
(unless offset
|
||||
|
|
|
|||
Loading…
Reference in a new issue