From: Lars Ingebrigtsen Date: Sun, 22 Aug 2021 23:52:16 +0000 (+0200) Subject: Do command mode markup in xwidget.el X-Git-Tag: emacs-28.0.90~1351 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5d32630f792f7d0ebbabb20ede076920cb2096a1;p=emacs.git Do command mode markup in xwidget.el --- diff --git a/etc/NEWS b/etc/NEWS index abef0ffcd0a..3793bc46265 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -3833,12 +3833,14 @@ If Emacs was built with xwidget support, you can access the embedded webkit browser with 'M-x xwidget-webkit-browse-url'. Viewing two instances of xwidget webkit is not supported. +--- *** Downloading files from xwidget-webkit is now supported. The new variable 'xwidget-webkit-download-dir' says where to download to. -*** New functions for xwidget-webkit mode -'xwidget-webkit-clone-and-split-below', -'xwidget-webkit-clone-and-split-right'. +--- +*** New command 'xwidget-webkit-clone-and-split-below'. +*** New command 'xwidget-webkit-clone-and-split-right'. +These are used in 'xwidget-webkit-mode'. --- *** New variable 'xwidget-webkit-enable-plugins'. diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 33d30d349de..f8cb7a7adde 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -95,9 +95,7 @@ NEW-SESSION specifies whether to create a new xwidget-webkit session. Interactively, URL defaults to the string looking like a url around point." (interactive (progn (require 'browse-url) - (browse-url-interactive-arg "xwidget-webkit URL: " - ;;(xwidget-webkit-current-url) - ))) + (browse-url-interactive-arg "xwidget-webkit URL: "))) (or (featurep 'xwidget-internal) (user-error "Your Emacs was not compiled with xwidgets support")) (when (stringp url) @@ -112,7 +110,7 @@ Interactively, URL defaults to the string looking like a url around point." "Clone current URL into a new widget place in new window below. Get the URL of current session, then browse to the URL in `split-window-below' with a new xwidget webkit session." - (interactive) + (interactive nil xwidget-webkit-mode) (let ((url (xwidget-webkit-current-url))) (with-selected-window (split-window-below) (xwidget-webkit-new-session url)))) @@ -121,7 +119,7 @@ in `split-window-below' with a new xwidget webkit session." "Clone current URL into a new widget place in new window right. Get the URL of current session, then browse to the URL in `split-window-right' with a new xwidget webkit session." - (interactive) + (interactive nil xwidget-webkit-mode) (let ((url (xwidget-webkit-current-url))) (with-selected-window (split-window-right) (xwidget-webkit-new-session url)))) @@ -168,12 +166,12 @@ in `split-window-right' with a new xwidget webkit session." (defun xwidget-webkit-zoom-in () "Increase webkit view zoom factor." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-zoom (xwidget-webkit-current-session) 0.1)) (defun xwidget-webkit-zoom-out () "Decrease webkit view zoom factor." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-zoom (xwidget-webkit-current-session) -0.1)) (defun xwidget-webkit-scroll-up (&optional arg) @@ -181,7 +179,7 @@ in `split-window-right' with a new xwidget webkit session." Stop if bottom of page is reached. Interactively, ARG is the prefix numeric argument. Negative ARG scrolls down." - (interactive "P") + (interactive "P" xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) (format "window.scrollBy(0, %d);" @@ -192,7 +190,7 @@ Negative ARG scrolls down." Stop if top of page is reached. Interactively, ARG is the prefix numeric argument. Negative ARG scrolls up." - (interactive "P") + (interactive "P" xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) (format "window.scrollBy(0, -%d);" @@ -203,7 +201,7 @@ Negative ARG scrolls up." The height of line is calculated with `window-font-height'. Stop if the bottom edge of the page is reached. If N is omitted or nil, scroll up by one line." - (interactive "p") + (interactive "p" xwidget-webkit-mode) (xwidget-webkit-scroll-up (* n (window-font-height)))) (defun xwidget-webkit-scroll-down-line (&optional n) @@ -211,14 +209,14 @@ If N is omitted or nil, scroll up by one line." The height of line is calculated with `window-font-height'. Stop if the top edge of the page is reached. If N is omitted or nil, scroll down by one line." - (interactive "p") + (interactive "p" xwidget-webkit-mode) (xwidget-webkit-scroll-down (* n (window-font-height)))) (defun xwidget-webkit-scroll-forward (&optional n) "Scroll webkit horizontally by N chars. The width of char is calculated with `window-font-width'. If N is omitted or nil, scroll forwards by one char." - (interactive "p") + (interactive "p" xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) (format "window.scrollBy(%d, 0);" @@ -228,7 +226,7 @@ If N is omitted or nil, scroll forwards by one char." "Scroll webkit back by N chars. The width of char is calculated with `window-font-width'. If N is omitted or nil, scroll backwards by one char." - (interactive "p") + (interactive "p" xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) (format "window.scrollBy(-%d, 0);" @@ -236,14 +234,14 @@ If N is omitted or nil, scroll backwards by one char." (defun xwidget-webkit-scroll-top () "Scroll webkit to the very top." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) "window.scrollTo(pageXOffset, 0);")) (defun xwidget-webkit-scroll-bottom () "Scroll webkit to the very bottom." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-execute-script (xwidget-webkit-current-session) "window.scrollTo(pageXOffset, window.document.body.scrollHeight);")) @@ -261,7 +259,7 @@ If N is omitted or nil, scroll backwards by one char." (defun xwidget-event-handler () "Receive xwidget event." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-log "stuff happened to xwidget %S" last-input-event) (let* ((xwidget-event-type (nth 1 last-input-event)) @@ -308,8 +306,8 @@ If non-nil, plugins are enabled. Otherwise, disabled." :type 'boolean :version "28.1")) -(define-derived-mode xwidget-webkit-mode - special-mode "xwidget-webkit" "Xwidget webkit view mode." +(define-derived-mode xwidget-webkit-mode special-mode "xwidget-webkit" + "Xwidget webkit view mode." (setq buffer-read-only t) (setq-local bookmark-make-record-function #'xwidget-webkit-bookmark-make-record) @@ -422,7 +420,7 @@ function findactiveelement(doc){ (defun xwidget-webkit-insert-string () "Insert string into the active field in the current webkit widget." ;; Read out the string in the field first and provide for edit. - (interactive) + (interactive nil xwidget-webkit-mode) ;; As the prompt differs on JavaScript execution results, ;; the function must handle the prompt itself. (let ((xww (xwidget-webkit-current-session))) @@ -458,7 +456,7 @@ XW is the xwidget identifier, TEXT is retrieved from the webkit." (defun xwidget-webkit-end-edit-textarea () "End editing of a webkit text area." - (interactive) + (interactive nil xwidget-webkit-mode) (goto-char (point-min)) (while (search-forward "\n" nil t) (replace-match "\\n" nil t)) @@ -474,7 +472,8 @@ XW is the xwidget identifier, TEXT is retrieved from the webkit." The ELEMENT-SELECTOR must be a valid CSS selector. For example, use this to display an anchor." (interactive (list (xwidget-webkit-current-session) - (read-string "Element selector: "))) + (read-string "Element selector: ")) + xwidget-webkit-mode) (xwidget-webkit-execute-script xw (format " @@ -490,7 +489,8 @@ use this to display an anchor." "Make webkit xwidget XW show a named element ELEMENT-NAME. For example, use this to display an anchor." (interactive (list (xwidget-webkit-current-session) - (read-string "Element name: "))) + (read-string "Element name: ")) + xwidget-webkit-mode) ;; TODO: This needs to be interfaced into browse-url somehow. The ;; tricky part is that we need to do this in two steps: A: load the ;; base url, wait for load signal to arrive B: navigate to the @@ -510,7 +510,8 @@ For example, use this to display an anchor." "Make webkit xwidget XW show an id-element ELEMENT-ID. For example, use this to display an anchor." (interactive (list (xwidget-webkit-current-session) - (read-string "Element id: "))) + (read-string "Element id: ")) + xwidget-webkit-mode) (xwidget-webkit-execute-script xw (format " @@ -526,7 +527,8 @@ For example, use this to display an anchor." "Make webkit xwidget XW show a name or element id ELEMENT-ID. For example, use this to display an anchor." (interactive (list (xwidget-webkit-current-session) - (read-string "Name or element id: "))) + (read-string "Name or element id: ")) + xwidget-webkit-mode) (xwidget-webkit-execute-script xw (format " @@ -541,12 +543,12 @@ For example, use this to display an anchor." (defun xwidget-webkit-adjust-size-to-content () "Adjust webkit to content size." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-adjust-size-to-content (xwidget-webkit-current-session))) (defun xwidget-webkit-adjust-size-dispatch () "Adjust size according to mode." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-adjust-size-to-window (xwidget-webkit-current-session)) ;; The recenter is intended to correct a visual glitch. ;; It errors out if the buffer isn't visible, but then we don't get @@ -575,12 +577,12 @@ For example, use this to display an anchor." (defun xwidget-webkit-adjust-size (w h) "Manually set webkit size to width W, height H." ;; TODO shouldn't be tied to the webkit xwidget - (interactive "nWidth:\nnHeight:\n") + (interactive "nWidth:\nnHeight:\n" xwidget-webkit-mode) (xwidget-resize (xwidget-webkit-current-session) w h)) (defun xwidget-webkit-fit-width () "Adjust width of webkit to window width." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-adjust-size (- (nth 2 (window-inside-pixel-edges)) (car (window-inside-pixel-edges))) 1000)) @@ -632,22 +634,22 @@ For example, use this to display an anchor." (defun xwidget-webkit-back () "Go back to previous URL in xwidget webkit buffer." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-goto-history (xwidget-webkit-current-session) -1)) (defun xwidget-webkit-forward () "Go forward in history." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-goto-history (xwidget-webkit-current-session) 1)) (defun xwidget-webkit-reload () "Reload current URL." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-goto-history (xwidget-webkit-current-session) 0)) (defun xwidget-webkit-current-url () "Display the current xwidget webkit URL and place it on the `kill-ring'." - (interactive) + (interactive nil xwidget-webkit-mode) (let ((url (xwidget-webkit-uri (xwidget-webkit-current-session)))) (message "URL: %s" (kill-new (or url ""))))) @@ -661,7 +663,7 @@ For example, use this to display an anchor." (defun xwidget-webkit-copy-selection-as-kill () "Get the webkit selection and put it on the `kill-ring'." - (interactive) + (interactive nil xwidget-webkit-mode) (xwidget-webkit-get-selection #'kill-new)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;