diff options
author | Po Lu <luangruo@yahoo.com> | 2021-11-06 20:59:08 +0800 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-11-07 02:59:42 +0100 |
commit | 0be966f97e3bda057318d971d022515cfa6eb37b (patch) | |
tree | 177c0b407ac568bd9e62536207fa75be8457c5d7 /lisp/xwidget.el | |
parent | 1a84537f7938afcd155ee5e9efc104fc8f027e0f (diff) | |
download | emacs-0be966f97e3bda057318d971d022515cfa6eb37b.tar.gz emacs-0be966f97e3bda057318d971d022515cfa6eb37b.tar.bz2 emacs-0be966f97e3bda057318d971d022515cfa6eb37b.zip |
Make "open in new window" from an xwidget's context menu work
* doc/lispref/commands.texi (Xwidget Events): Document new event type.
* doc/lisprefdisplay.texi (Xwidgets): Document new argument to
make-xwidget, and new function.
* etc/NEWS: Document changes.
* lisp/xwidget.el: Bind xwidget-display-event to
xwidget-webkit-display-event.
(xwidget-webkit-import-widget): New function.
(xwidget-webkit-display-event): New command.
* src/keyboard.c (kbd_buffer_get_event): New event type.
(make_lispy_event): Handle XWIDGET_DISPLAY_EVENTs.
(syms_f_keyboard): Define new symbol.
* src/termhooks.h (enum event_kind): New enum XWIDGET_DISPLAY_EVENT.
* src/xwidget.c (webkit_create_cb)
(store_xwidget_display_event)
(webkit_ready_to_show)
(webkit_create_cb_1, webkit_create_cb)
(Fset_xwidget_buffer): New functions.
(Fmake_xwidget): Add internal argument RELATED and connect create
signal.
(syms_of_xwidget): Define now subrs.
Diffstat (limited to 'lisp/xwidget.el')
-rw-r--r-- | lisp/xwidget.el | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el index bd3c0876f59..d427e702331 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -37,6 +37,7 @@ (declare-function make-xwidget "xwidget.c" (type title width height arguments &optional buffer)) (declare-function xwidget-buffer "xwidget.c" (xwidget)) +(declare-function set-xwidget-buffer "xwidget.c" (xwidget buffer)) (declare-function xwidget-size-request "xwidget.c" (xwidget)) (declare-function xwidget-resize "xwidget.c" (xwidget new-width new-height)) (declare-function xwidget-webkit-execute-script "xwidget.c" @@ -701,6 +702,29 @@ For example, use this to display an anchor." (xwidget-webkit-mode) (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url))) +(defun xwidget-webkit-import-widget (xwidget) + "Create a new webkit session buffer from XWIDGET, an existing xwidget. +Return the buffer." + (let* ((bufname (generate-new-buffer-name "*xwidget-webkit*")) + (callback #'xwidget-webkit-callback) + (buffer (get-buffer-create bufname))) + (with-current-buffer buffer + (save-excursion + (erase-buffer) + (insert ".") + (put-text-property (point-min) (point-max) + 'display (list 'xwidget :xwidget xwidget))) + (xwidget-put xwidget 'callback callback) + (set-xwidget-buffer xwidget buffer) + (xwidget-webkit-mode)) + buffer)) + +(defun xwidget-webkit-display-event (event) + "Import the xwidget inside EVENT and display it." + (interactive "e") + (display-buffer (xwidget-webkit-import-widget (nth 1 event)))) + +(global-set-key [xwidget-display-event] 'xwidget-webkit-display-event) (defun xwidget-webkit-goto-url (url) "Goto URL with xwidget webkit." |