* Add command to browse xwidget history
[not found] <87a6i62e45.fsf.ref@yahoo.com>
@ 2021-11-15 5:15 ` Po Lu
2021-11-15 9:40 ` Robert Pluim
2021-11-15 12:56 ` Eli Zaretskii
0 siblings, 2 replies; 5+ messages in thread
From: Po Lu @ 2021-11-15 5:15 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 235 bytes --]
I added a command that lets you browse the history of the current
xwidget, but I'm not sure the documentation for it is detailed enough.
Please let me know if this is OK to push, and if not, how I can improve
it. Thanks in advance.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-command-to-browse-xwidget-history.patch --]
[-- Type: text/x-patch, Size: 7097 bytes --]
From 3e867ae768292ecb855095d49cd2f35ab6c77ce9 Mon Sep 17 00:00:00 2001
From: Po Lu <luangruo@yahoo.com>
Date: Mon, 15 Nov 2021 13:12:45 +0800
Subject: [PATCH] Add command to browse xwidget history
* doc/emacs/misc.texi (Embedded WebKit Widgets)
* etc/NEWS: Document `xwidget-webkit-browse-history'.
* lisp/xwidget.el (xwidget-webkit-mode-map): Bind "H" to
xwidget-webkit-browse-history.
(xwidget-webkit-import-widget): Set last session buffer correctly.
(xwidget-webkit-browse-history): New command.
(xwidget-webkit-history--session): New variable.
(xwidget-webkit-history--insert-item)
(xwidget-webkit-history-select-item)
(xwidget-webkit-history-reload): New functions.
(xwidget-webkit-history-mode): New major mode.
---
doc/emacs/misc.texi | 8 ++++++
etc/NEWS | 6 +++++
lisp/xwidget.el | 64 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 78 insertions(+)
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 3d423d7675..74542d46eb 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -3011,6 +3011,14 @@ Embedded WebKit Widgets
To leave incremental search, you can type @kbd{C-g}.
+@findex xwidget-webkit-browse-history
+@cindex history of webkit buffers
+ The command @code{xwidget-webkit-browse-history} displays a buffer
+containing a list of pages once loaded by the current WebKit buffer,
+and lets you navigate to those pages by hitting @kbd{RET}.
+
+It is bound to @kbd{H}.
+
@node Browse-URL
@subsection Following URLs
@cindex World Wide Web
diff --git a/etc/NEWS b/etc/NEWS
index 312fc18f4f..cda29650c0 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -486,6 +486,12 @@ This mode acts similarly to incremental search, and allows to search
the contents of a WebKit widget. In xwidget-webkit mode, it is bound
to 'C-s' and 'C-r'.
++++
+*** New command 'xwidget-webkit-browse-history'.
+This command displays a buffer containing the page load history of
+the current WebKit widget, and allows you to navigate to various
+points in history.
+
---
*** On X11, the WebKit inspector is now available inside xwidgets.
To access the inspector, right click on the widget and select "Inspect
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 485d995f41..7e784aa0cf 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -55,6 +55,7 @@
(declare-function delete-xwidget-view "xwidget.c" (xwidget-view))
(declare-function get-buffer-xwidgets "xwidget.c" (buffer))
(declare-function xwidget-query-on-exit-flag "xwidget.c" (xwidget))
+(declare-function xwidget-webkit-back-forward-list "xwidget.c" (xwidget &optional limit))
(defgroup xwidget nil
"Displaying native widgets in Emacs buffers."
@@ -194,6 +195,7 @@ xwidget-webkit-mode-map
(define-key map "e" 'xwidget-webkit-edit-mode)
(define-key map "\C-r" 'xwidget-webkit-isearch-mode)
(define-key map "\C-s" 'xwidget-webkit-isearch-mode)
+ (define-key map "H" 'xwidget-webkit-browse-history)
;;similar to image mode bindings
(define-key map (kbd "SPC") 'xwidget-webkit-scroll-up)
@@ -228,6 +230,7 @@ nil
["Back" xwidget-webkit-back t]
["Forward" xwidget-webkit-forward t]
["Reload" xwidget-webkit-reload t]
+ ["History" xwidget-webkit-browse-history t]
["Insert String" xwidget-webkit-insert-string
:active t
:help "Insert a string into the currently active field"]
@@ -396,6 +399,9 @@ xwidget-webkit-callback
(when (or (string-equal (nth 3 last-input-event)
"load-finished")
(> (length title) 0))
+ (when (get-buffer "*Xwidget WebKit History*")
+ (with-current-buffer "*Xwidget WebKit History*"
+ (revert-buffer)))
(with-current-buffer (xwidget-buffer xwidget)
(setq xwidget-webkit--title title)
(force-mode-line-update)
@@ -775,6 +781,7 @@ xwidget-webkit-import-widget
(callback #'xwidget-webkit-callback)
(buffer (get-buffer-create bufname)))
(with-current-buffer buffer
+ (setq xwidget-webkit-last-session-buffer buffer)
(save-excursion
(erase-buffer)
(insert ".")
@@ -821,6 +828,15 @@ xwidget-webkit-current-url
(let ((url (xwidget-webkit-uri (xwidget-webkit-current-session))))
(message "URL: %s" (kill-new (or url "")))))
+(defun xwidget-webkit-browse-history ()
+ "Display a buffer containing the history of page loads."
+ (interactive)
+ (setq xwidget-webkit-last-session-buffer (current-buffer))
+ (let ((buffer (get-buffer-create "*Xwidget WebKit History*")))
+ (with-current-buffer buffer
+ (xwidget-webkit-history-mode))
+ (display-buffer buffer)))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun xwidget-webkit-get-selection (proc)
"Get the webkit selection and pass it to PROC."
@@ -1059,6 +1075,54 @@ xwidget-webkit-isearch-yank-kill
(concat xwidget-webkit-isearch--string
(current-kill 0)))
(xwidget-webkit-isearch--update))
+
+(defvar-local xwidget-webkit-history--session nil
+ "The xwidget this history buffer controls.")
+
+(defun xwidget-webkit-history--insert-item (item)
+ "Insert specified ITEM into the current buffer."
+ (let ((idx (car item))
+ (title (cadr item))
+ (uri (caddr item)))
+ (push (list idx (vector title uri))
+ tabulated-list-entries)))
+
+(defun xwidget-webkit-history-select-item ()
+ "Navigate to this line's history item."
+ (interactive)
+ (let ((id (tabulated-list-get-id)))
+ (xwidget-webkit-goto-history xwidget-webkit-history--session id))
+ (xwidget-webkit-history-reload))
+
+(defun xwidget-webkit-history-reload (&rest ignored)
+ "Reload the current history buffer."
+ (interactive)
+ (setq tabulated-list-entries nil)
+ (let* ((back-forward-list
+ (xwidget-webkit-back-forward-list xwidget-webkit-history--session))
+ (back-list (car back-forward-list))
+ (here (cadr back-forward-list))
+ (forward-list (caddr back-forward-list)))
+ (mapc #'xwidget-webkit-history--insert-item back-list)
+ (xwidget-webkit-history--insert-item here)
+ (mapc #'xwidget-webkit-history--insert-item forward-list))
+ (tabulated-list-print t nil))
+
+(define-derived-mode xwidget-webkit-history-mode tabulated-list-mode
+ "Xwidget Webkit History"
+ "Major mode for browsing the history of an Xwidget Webkit buffer.
+Each line describes an entry in history."
+ (setq truncate-lines t)
+ (setq buffer-read-only t)
+ (setq tabulated-list-format [("Title" 50 nil) ("URL" 100 nil)])
+ (setq tabulated-list-entries nil)
+ (setq xwidget-webkit-history--session (xwidget-webkit-current-session))
+ (xwidget-webkit-history-reload)
+ (setq-local revert-buffer-function #'xwidget-webkit-history-reload)
+ (tabulated-list-init-header))
+
+(define-key xwidget-webkit-history-mode-map (kbd "RET")
+ #'xwidget-webkit-history-select-item)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar xwidget-view-list) ; xwidget.c
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Add command to browse xwidget history
2021-11-15 5:15 ` Add command to browse xwidget history Po Lu
@ 2021-11-15 9:40 ` Robert Pluim
2021-11-15 9:58 ` Po Lu
2021-11-15 12:56 ` Eli Zaretskii
1 sibling, 1 reply; 5+ messages in thread
From: Robert Pluim @ 2021-11-15 9:40 UTC (permalink / raw)
To: Po Lu; +Cc: emacs-devel
>>>>> On Mon, 15 Nov 2021 13:15:54 +0800, Po Lu <luangruo@yahoo.com> said:
Po> +@findex xwidget-webkit-browse-history
Po> +@cindex history of webkit buffers
Po> + The command @code{xwidget-webkit-browse-history} displays a buffer
Po> +containing a list of pages once loaded by the current WebKit buffer,
'previously loaded'
Po> +and lets you navigate to those pages by hitting @kbd{RET}.
Po> +
Po> +It is bound to @kbd{H}.
Po> +
Po> @node Browse-URL
Po> @subsection Following URLs
Po> @cindex World Wide Web
Po> diff --git a/etc/NEWS b/etc/NEWS
Po> index 312fc18f4f..cda29650c0 100644
Po> --- a/etc/NEWS
Po> +++ b/etc/NEWS
Po> @@ -486,6 +486,12 @@ This mode acts similarly to incremental search, and allows to search
Po> the contents of a WebKit widget. In xwidget-webkit mode, it is bound
Po> to 'C-s' and 'C-r'.
Po> ++++
Po> +*** New command 'xwidget-webkit-browse-history'.
Po> +This command displays a buffer containing the page load history of
Po> +the current WebKit widget, and allows you to navigate to various
Po> +points in history.
Po> +
Short phrases are better: 'allows you to navigate it'
Po> + (when (get-buffer "*Xwidget WebKit History*")
Po> + (with-current-buffer "*Xwidget WebKit History*"
Po> + (revert-buffer)))
Minor optimisation: use `when-let'. Avoid repetition. DRY 😄
Robert
--
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Add command to browse xwidget history
2021-11-15 9:40 ` Robert Pluim
@ 2021-11-15 9:58 ` Po Lu
0 siblings, 0 replies; 5+ messages in thread
From: Po Lu @ 2021-11-15 9:58 UTC (permalink / raw)
To: Robert Pluim; +Cc: emacs-devel
Robert Pluim <rpluim@gmail.com> writes:
> 'previously loaded'
> Short phrases are better: 'allows you to navigate it'
> Minor optimisation: use `when-let'. Avoid repetition. DRY 😄
Thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Add command to browse xwidget history
2021-11-15 5:15 ` Add command to browse xwidget history Po Lu
2021-11-15 9:40 ` Robert Pluim
@ 2021-11-15 12:56 ` Eli Zaretskii
2021-11-15 12:58 ` Po Lu
1 sibling, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2021-11-15 12:56 UTC (permalink / raw)
To: Po Lu; +Cc: emacs-devel
> From: Po Lu <luangruo@yahoo.com>
> Date: Mon, 15 Nov 2021 13:15:54 +0800
>
> I added a command that lets you browse the history of the current
> xwidget, but I'm not sure the documentation for it is detailed enough.
>
> Please let me know if this is OK to push, and if not, how I can improve
> it. Thanks in advance.
The documentation LGTM, but it is customary in Emacs to have mouse
support in such list buffers, and also show tooltips when the mouse
hovers over an item. Compare with "M-x proced", for example.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Add command to browse xwidget history
2021-11-15 12:56 ` Eli Zaretskii
@ 2021-11-15 12:58 ` Po Lu
0 siblings, 0 replies; 5+ messages in thread
From: Po Lu @ 2021-11-15 12:58 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 330 bytes --]
Eli Zaretskii <eliz@gnu.org> writes:
> The documentation LGTM, but it is customary in Emacs to have mouse
> support in such list buffers, and also show tooltips when the mouse
> hovers over an item. Compare with "M-x proced", for example.
Yes, I added that support on my side, but forgot to send a patch.
Here it is, thanks.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-command-to-browse-xwidget-history.patch --]
[-- Type: text/x-patch, Size: 7806 bytes --]
From b52851272fdbb17a9ed59b0a03dfdf9d3725e97b Mon Sep 17 00:00:00 2001
From: Po Lu <luangruo@yahoo.com>
Date: Mon, 15 Nov 2021 13:12:45 +0800
Subject: [PATCH] Add command to browse xwidget history
* doc/emacs/misc.texi (Embedded WebKit Widgets)
* etc/NEWS: Document `xwidget-webkit-browse-history'.
* lisp/xwidget.el (xwidget-webkit-mode-map): Bind "H" to
xwidget-webkit-browse-history.
(xwidget-webkit-import-widget): Set last session buffer correctly.
(xwidget-webkit-browse-history): New command.
(xwidget-webkit-history--session): New variable.
(xwidget-webkit-history--insert-item)
(xwidget-webkit-history-select-item)
(xwidget-webkit-history-reload): New functions.
(xwidget-webkit-history-mode): New major mode.
---
doc/emacs/misc.texi | 8 +++++
etc/NEWS | 5 +++
lisp/xwidget.el | 77 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 90 insertions(+)
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 3d423d7675..1f2c852fac 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -3011,6 +3011,14 @@ Embedded WebKit Widgets
To leave incremental search, you can type @kbd{C-g}.
+@findex xwidget-webkit-browse-history
+@cindex history of webkit buffers
+ The command @code{xwidget-webkit-browse-history} displays a buffer
+containing a list of pages previously loaded by the current WebKit
+buffer, and lets you navigate to those pages by hitting @kbd{RET}.
+
+It is bound to @kbd{H}.
+
@node Browse-URL
@subsection Following URLs
@cindex World Wide Web
diff --git a/etc/NEWS b/etc/NEWS
index 312fc18f4f..d52461909f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -486,6 +486,11 @@ This mode acts similarly to incremental search, and allows to search
the contents of a WebKit widget. In xwidget-webkit mode, it is bound
to 'C-s' and 'C-r'.
++++
+*** New command 'xwidget-webkit-browse-history'.
+This command displays a buffer containing the page load history of
+the current WebKit widget, and allows you to navigate it.
+
---
*** On X11, the WebKit inspector is now available inside xwidgets.
To access the inspector, right click on the widget and select "Inspect
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 485d995f41..7031769c26 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -55,6 +55,7 @@
(declare-function delete-xwidget-view "xwidget.c" (xwidget-view))
(declare-function get-buffer-xwidgets "xwidget.c" (buffer))
(declare-function xwidget-query-on-exit-flag "xwidget.c" (xwidget))
+(declare-function xwidget-webkit-back-forward-list "xwidget.c" (xwidget &optional limit))
(defgroup xwidget nil
"Displaying native widgets in Emacs buffers."
@@ -194,6 +195,7 @@ xwidget-webkit-mode-map
(define-key map "e" 'xwidget-webkit-edit-mode)
(define-key map "\C-r" 'xwidget-webkit-isearch-mode)
(define-key map "\C-s" 'xwidget-webkit-isearch-mode)
+ (define-key map "H" 'xwidget-webkit-browse-history)
;;similar to image mode bindings
(define-key map (kbd "SPC") 'xwidget-webkit-scroll-up)
@@ -228,6 +230,7 @@ nil
["Back" xwidget-webkit-back t]
["Forward" xwidget-webkit-forward t]
["Reload" xwidget-webkit-reload t]
+ ["History" xwidget-webkit-browse-history t]
["Insert String" xwidget-webkit-insert-string
:active t
:help "Insert a string into the currently active field"]
@@ -396,6 +399,9 @@ xwidget-webkit-callback
(when (or (string-equal (nth 3 last-input-event)
"load-finished")
(> (length title) 0))
+ (when-let ((buffer (get-buffer "*Xwidget WebKit History*")))
+ (with-current-buffer buffer
+ (revert-buffer)))
(with-current-buffer (xwidget-buffer xwidget)
(setq xwidget-webkit--title title)
(force-mode-line-update)
@@ -775,6 +781,7 @@ xwidget-webkit-import-widget
(callback #'xwidget-webkit-callback)
(buffer (get-buffer-create bufname)))
(with-current-buffer buffer
+ (setq xwidget-webkit-last-session-buffer buffer)
(save-excursion
(erase-buffer)
(insert ".")
@@ -821,6 +828,15 @@ xwidget-webkit-current-url
(let ((url (xwidget-webkit-uri (xwidget-webkit-current-session))))
(message "URL: %s" (kill-new (or url "")))))
+(defun xwidget-webkit-browse-history ()
+ "Display a buffer containing the history of page loads."
+ (interactive)
+ (setq xwidget-webkit-last-session-buffer (current-buffer))
+ (let ((buffer (get-buffer-create "*Xwidget WebKit History*")))
+ (with-current-buffer buffer
+ (xwidget-webkit-history-mode))
+ (display-buffer buffer)))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun xwidget-webkit-get-selection (proc)
"Get the webkit selection and pass it to PROC."
@@ -1059,6 +1075,67 @@ xwidget-webkit-isearch-yank-kill
(concat xwidget-webkit-isearch--string
(current-kill 0)))
(xwidget-webkit-isearch--update))
+
+(defvar-local xwidget-webkit-history--session nil
+ "The xwidget this history buffer controls.")
+
+(define-button-type 'xwidget-webkit-history 'action #'xwidget-webkit-history-select-item)
+
+(defun xwidget-webkit-history--insert-item (item)
+ "Insert specified ITEM into the current buffer."
+ (let ((idx (car item))
+ (title (cadr item))
+ (uri (caddr item)))
+ (setq tabulated-list-entries
+ (push (list idx (vector (list (number-to-string idx)
+ :type 'xwidget-webkit-history)
+ (list title :type 'xwidget-webkit-history)
+ (list uri :type 'xwidget-webkit-history)))
+ tabulated-list-entries))))
+
+(defun xwidget-webkit-history-select-item (pos)
+ "Navigate to the history item underneath POS."
+ (interactive "P")
+ (let ((id (tabulated-list-get-id pos)))
+ (xwidget-webkit-goto-history xwidget-webkit-history--session id))
+ (xwidget-webkit-history-reload))
+
+(defun xwidget-webkit-history-reload (&rest ignored)
+ "Reload the current history buffer."
+ (interactive)
+ (setq tabulated-list-entries nil)
+ (let* ((back-forward-list
+ (xwidget-webkit-back-forward-list xwidget-webkit-history--session))
+ (back-list (car back-forward-list))
+ (here (cadr back-forward-list))
+ (forward-list (caddr back-forward-list)))
+ (mapc #'xwidget-webkit-history--insert-item (nreverse forward-list))
+ (xwidget-webkit-history--insert-item here)
+ (mapc #'xwidget-webkit-history--insert-item back-list)
+ (tabulated-list-print t nil)
+ (goto-char (point-min))
+ (let ((position (line-beginning-position (1+ (length back-list)))))
+ (goto-char position)
+ (setq-local overlay-arrow-position (make-marker))
+ (set-marker overlay-arrow-position position))))
+
+(define-derived-mode xwidget-webkit-history-mode tabulated-list-mode
+ "Xwidget Webkit History"
+ "Major mode for browsing the history of an Xwidget Webkit buffer.
+Each line describes an entry in history."
+ (setq truncate-lines t)
+ (setq buffer-read-only t)
+ (setq tabulated-list-format [("Index" 10 nil)
+ ("Title" 50 nil)
+ ("URL" 100 nil)])
+ (setq tabulated-list-entries nil)
+ (setq xwidget-webkit-history--session (xwidget-webkit-current-session))
+ (xwidget-webkit-history-reload)
+ (setq-local revert-buffer-function #'xwidget-webkit-history-reload)
+ (tabulated-list-init-header))
+
+(define-key xwidget-webkit-history-mode-map (kbd "RET")
+ #'xwidget-webkit-history-select-item)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar xwidget-view-list) ; xwidget.c
--
2.31.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-11-15 12:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <87a6i62e45.fsf.ref@yahoo.com>
2021-11-15 5:15 ` Add command to browse xwidget history Po Lu
2021-11-15 9:40 ` Robert Pluim
2021-11-15 9:58 ` Po Lu
2021-11-15 12:56 ` Eli Zaretskii
2021-11-15 12:58 ` Po Lu
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.