* bug#19106: M-x eww: use the current URI as the default; be bound to a key
@ 2014-11-19 12:01 Ivan Shmakov
2014-11-19 12:17 ` Tassilo Horn
2014-11-19 17:09 ` bug#19106: M-x eww: use the current URI as the default; " Mark Oteiza
0 siblings, 2 replies; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-19 12:01 UTC (permalink / raw
To: 19106
[-- Attachment #1: Type: text/plain, Size: 841 bytes --]
Package: emacs
Severity: wishlist
The patch MIMEd makes ‘eww’ use the currently browsed URI as the
default while prompting. One of the consequences is that it’s
now possible for the user to use M-n (or <down>) to get one, and
feed it back to EWW after editing as necessary.
I also suggest to bind the ‘eww’ command to ‘G’ in eww-mode-map,
for both it’s a sane mnemonic (“Go to”), and also given that
this behavior is rather similar to the Lynx ECGOTO command,
bound to ‘G’ in its default keymap.
Also to note is that M-x eww currently does /not/ call
eww-save-history, and simply “forgets” the page currently
visited. I use a workaround for that, but have no sane fix to
suggest right now.
--
FSF associate member #7257 http://boycottsystemd.org/ … 3013 B6A0 230E 334A
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/diff, Size: 931 bytes --]
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -159,9 +203,14 @@
;;;###autoload
(defun eww (url)
"Fetch URL and render the page.
If the input doesn't look like an URL or a domain name, the
word(s) will be searched for via `eww-search-prefix'."
- (interactive "sEnter URL or keywords: ")
+ (interactive
+ (let* ((uri (plist-get eww-data :url))
+ (prompt (concat "Enter URL or keywords"
+ (if uri (format " (default %s)" uri) "")
+ ": ")))
+ (list (read-string prompt nil nil uri))))
(setq url (string-trim url))
(cond ((string-match-p "\\`file:/" url))
;; Don't mangle file: URLs at all.
@@ -513,6 +568,7 @@ the like."
(suppress-keymap map)
(define-key map "q" 'quit-window)
(define-key map "g" 'eww-reload)
+ (define-key map "G" 'eww)
(define-key map [?\t] 'shr-next-link)
(define-key map [?\M-\t] 'shr-previous-link)
(define-key map [delete] 'scroll-down-command)
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 12:01 bug#19106: M-x eww: use the current URI as the default; be bound to a key Ivan Shmakov
@ 2014-11-19 12:17 ` Tassilo Horn
2014-11-19 13:31 ` Ivan Shmakov
2014-11-19 17:09 ` bug#19106: M-x eww: use the current URI as the default; " Mark Oteiza
1 sibling, 1 reply; 12+ messages in thread
From: Tassilo Horn @ 2014-11-19 12:17 UTC (permalink / raw
To: Ivan Shmakov; +Cc: 19106
Ivan Shmakov <ivan@siamics.net> writes:
> The patch MIMEd makes ‘eww’ use the currently browsed URI as the
> default while prompting.
It would also be neat if M-x eww RET would use the URL at point as a
default (at least in non-eww buffers). I've not set up eww as default
browse-url browser, but for some URLs (e.g., in info docs or emails) I'd
like to have a quick way to browse them with eww instead of my default
browser.
Bye,
Tassilo
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 12:17 ` Tassilo Horn
@ 2014-11-19 13:31 ` Ivan Shmakov
2014-11-19 14:37 ` Ivan Shmakov
0 siblings, 1 reply; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-19 13:31 UTC (permalink / raw
To: 19106
>>>>> Tassilo Horn <tsdh@gnu.org> writes:
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
>> The patch MIMEd makes ‘eww’ use the currently browsed URI as the
>> default while prompting.
> It would also be neat if M-x eww RET would use the URL at point as a
> default (at least in non-eww buffers). I've not set up eww as
> default browse-url browser, but for some URLs (e. g., in info docs or
> emails) I'd like to have a quick way to browse them with eww instead
> of my default browser.
This also makes sense, indeed. Perhaps we should either provide
yet another user-settable option for that (what about
eww-default-uri-hook – to be run -until-success – for
instance?), or provide /two/ separate commands for these two
behaviors. Or even three, as it’s perfectly possible to stumble
on the case where the text under point is a valid URI, but lacks
an associated shr-url property (think of browsing a text/plain
Web page, for instance), or has it different to the text itself.
The eww-default-uri-hook solution seems reasonably easy to
implement; I hope to suggest a possible patch later.
--
FSF associate member #7257 http://boycottsystemd.org/ … 3013 B6A0 230E 334A
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 13:31 ` Ivan Shmakov
@ 2014-11-19 14:37 ` Ivan Shmakov
2014-11-19 17:31 ` Lars Magne Ingebrigtsen
2014-11-22 19:20 ` bug#19106: M-x eww: provide default URIs; " Ivan Shmakov
0 siblings, 2 replies; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-19 14:37 UTC (permalink / raw
To: 19106
[-- Attachment #1: Type: text/plain, Size: 773 bytes --]
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
[…]
> The eww-default-uri-hook solution seems reasonably easy to implement;
> I hope to suggest a possible patch later.
Better still, we can support all the options at the same time
simply by passing a list to read-string, as per the revised
patch MIMEd.
One may still wish to customize the order of the entries listed,
or perhaps to add new ones (think of recognizing, say, RFC 7154
or RFC7154 as a link to http://tools.ietf.org/html/rfc7154, for
instance), but to be convenient, there should probably be a
couple of helper functions to correspond to the lambdas in the
example code fragment also MIMEd.
--
FSF associate member #7257 http://boycottsystemd.org/ … 3013 B6A0 230E 334A
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/diff, Size: 1664 bytes --]
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -29,6 +29,7 @@
(require 'shr)
(require 'url)
(require 'url-queue)
+(require 'url-util) ; for url-get-url-at-point
(require 'mm-url)
(eval-when-compile (require 'subr-x)) ;; for string-trim
@@ -158,12 +159,29 @@
(define-key map "\r" 'eww-follow-link)
map))
+(defun eww-suggested-uris nil
+ "Return the list of URIs to suggest at the `eww' prompt."
+ ;; FIXME: allow for customization?
+ (remq nil
+ (list ;; in the shr-copy-url order
+ (get-text-property (point) 'shr-url)
+ (get-text-property (point) 'image-url)
+ ;; check the text itself
+ (url-get-url-at-point)
+ ;; fallback to the URI of the visited page
+ (plist-get eww-data :url)))
+
;;;###autoload
-(defun eww (url)
+(defun eww (url &optional no-save-history)
"Fetch URL and render the page.
If the input doesn't look like an URL or a domain name, the
word(s) will be searched for via `eww-search-prefix'."
- (interactive "sEnter URL or keywords: ")
+ (interactive
+ (let* ((uris (eww-suggested-uris))
+ (prompt (concat "Enter URL or keywords"
+ (if uris (format " (default %s)" (car uris) ""))
+ ": ")))
+ (list (read-string prompt nil nil uris))))
(setq url (string-trim url))
(cond ((string-match-p "\\`file:/" url))
;; Don't mangle file: URLs at all.
@@ -513,6 +526,7 @@ the like."
(suppress-keymap map)
(define-key map "q" 'quit-window)
(define-key map "g" 'eww-reload)
+ (define-key map "G" 'eww)
(define-key map [?\t] 'shr-next-link)
(define-key map [?\M-\t] 'shr-previous-link)
(define-key map [delete] 'scroll-down-command)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: Type: text/emacs-lisp, Size: 1064 bytes --]
(require 'cl-seq) ; for cl-reduce
(defcustom eww-suggest-uris
'((lambda ()
(list (get-text-property (point) 'shr-url)
(get-text-property (point) 'image-url)))
'url-get-url-at-point
(lambda ()
(plist-get eww-data :url)))
"List of functions called to form the list of default URIs for `eww'.
Each of the elements is a function returning either a string or a list
of strings. The results will be joined into a single list with
duplicate entries (if any) removed."
:version "25.1"
:group 'eww
:type 'hook)
(defun eww-suggested-uris nil
"Return the list of URIs to suggest at the `eww' prompt.
This list can be customized via `eww-suggest-uris'."
(let ((obseen (make-vector 42 0)))
(cl-reduce (lambda (acc elt)
(let ((uri (funcall elt)))
(if (or (not acc) (intern-soft uri obseen))
acc
(intern uri obseen)
(cons uri acc))))
eww-suggest-uris
:initial-value nil)))
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 12:01 bug#19106: M-x eww: use the current URI as the default; be bound to a key Ivan Shmakov
2014-11-19 12:17 ` Tassilo Horn
@ 2014-11-19 17:09 ` Mark Oteiza
2014-11-20 13:45 ` Ivan Shmakov
1 sibling, 1 reply; 12+ messages in thread
From: Mark Oteiza @ 2014-11-19 17:09 UTC (permalink / raw
To: 19106
Ivan Shmakov <ivan@siamics.net> writes:
> Package: emacs
> Severity: wishlist
>
> The patch MIMEd makes ‘eww’ use the currently browsed URI as the
> default while prompting. One of the consequences is that it’s
> now possible for the user to use M-n (or <down>) to get one, and
> feed it back to EWW after editing as necessary.
>
> I also suggest to bind the ‘eww’ command to ‘G’ in eww-mode-map,
> for both it’s a sane mnemonic (“Go to”), and also given that
> this behavior is rather similar to the Lynx ECGOTO command,
> bound to ‘G’ in its default keymap.
In elinks, ‘g’ is used for an empty “go to” prompt, and ‘G’ is used for
prompt populated with the current URL. In many other places, ‘o’ and
‘O’ are used (“open”), respectively. These places would be the firefox
addons vimperator or pentadactyl, and a number of keyboard driven webkit
browsers, though this is because they are vim-oriented so g/G are
already used. I think the ‘o’ ‘O’ mnemonic is nice as well, and these keys
are free in eww.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 14:37 ` Ivan Shmakov
@ 2014-11-19 17:31 ` Lars Magne Ingebrigtsen
2014-11-19 20:07 ` Ivan Shmakov
2014-11-22 19:20 ` bug#19106: M-x eww: provide default URIs; " Ivan Shmakov
1 sibling, 1 reply; 12+ messages in thread
From: Lars Magne Ingebrigtsen @ 2014-11-19 17:31 UTC (permalink / raw
To: Ivan Shmakov; +Cc: 19106
Ivan Shmakov <ivan@siamics.net> writes:
> Better still, we can support all the options at the same time
> simply by passing a list to read-string, as per the revised
> patch MIMEd.
Isn't the recommended way to supply defaults to functions like this to
stash it in `M-p'?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 17:31 ` Lars Magne Ingebrigtsen
@ 2014-11-19 20:07 ` Ivan Shmakov
2014-11-19 20:27 ` Lars Magne Ingebrigtsen
0 siblings, 1 reply; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-19 20:07 UTC (permalink / raw
To: 19106
>>>>> Lars Magne Ingebrigtsen <larsi@gnus.org> writes:
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
>> Better still, we can support all the options at the same time simply
>> by passing a list to read-string, as per the revised patch MIMEd.
> Isn't the recommended way to supply defaults to functions like this
> to stash it in `M-p'?
I do not copy. Care to provide an example of such a function?
(M-p? Did you, by a chance, mean M-n instead? At the very
least, C-x C-f has M-n to get buffer-file-name into the
minibuffer. And it’s exactly how either of my patches behave.)
--
FSF associate member #7257 np. Blücher — Kamelot … 3013 B6A0 230E 334A
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 20:07 ` Ivan Shmakov
@ 2014-11-19 20:27 ` Lars Magne Ingebrigtsen
2014-11-19 20:40 ` Ivan Shmakov
0 siblings, 1 reply; 12+ messages in thread
From: Lars Magne Ingebrigtsen @ 2014-11-19 20:27 UTC (permalink / raw
To: Ivan Shmakov; +Cc: 19106
Ivan Shmakov <ivan@siamics.net> writes:
> I do not copy. Care to provide an example of such a function?
>
> (M-p? Did you, by a chance, mean M-n instead? At the very
> least, C-x C-f has M-n to get buffer-file-name into the
> minibuffer. And it’s exactly how either of my patches behave.)
Er, yes, `M-n'.
I thought the patch had a "default (...)" thing instead?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 20:27 ` Lars Magne Ingebrigtsen
@ 2014-11-19 20:40 ` Ivan Shmakov
0 siblings, 0 replies; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-19 20:40 UTC (permalink / raw
To: 19106
>>>>> Lars Magne Ingebrigtsen <larsi@gnus.org> writes:
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
>> I do not copy. Care to provide an example of such a function?
>> (M-p? Did you, by a chance, mean M-n instead? At the very least,
>> C-x C-f has M-n to get buffer-file-name into the minibuffer. And
>> it’s exactly how either of my patches behave.)
> Er, yes, `M-n'.
> I thought the patch had a "default (...)" thing instead?
The second patch has both.
Specifically, when read-string is passed a (non-empty) list for
its ‘default’ argument, the car of such list is used as the
default value, while all the list elements are available for
M-n, M-p. The patch suggested just tries to make the “default
value” part clear to the user:
+ (prompt (concat "Enter URL or keywords"
+ (if uris (format " (default %s)" (car uris) ""))
+ ": ")))
--
FSF associate member #7257 http://boycottsystemd.org/ … 3013 B6A0 230E 334A
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: use the current URI as the default; be bound to a key
2014-11-19 17:09 ` bug#19106: M-x eww: use the current URI as the default; " Mark Oteiza
@ 2014-11-20 13:45 ` Ivan Shmakov
0 siblings, 0 replies; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-20 13:45 UTC (permalink / raw
To: 19106
>>>>> Mark Oteiza <mvoteiza@udel.edu> writes:
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
>> Package: emacs Severity: wishlist
>> The patch MIMEd makes ‘eww’ use the currently browsed URI as the
>> default while prompting. One of the consequences is that it’s now
>> possible for the user to use M-n (or <down>) to get one, and feed it
>> back to EWW after editing as necessary.
>> I also suggest to bind the ‘eww’ command to ‘G’ in eww-mode-map, for
>> both it’s a sane mnemonic (“Go to”), and also given that this
>> behavior is rather similar to the Lynx ECGOTO command, bound to ‘G’
>> in its default keymap.
> In elinks, ‘g’ is used for an empty “go to” prompt, and ‘G’ is used
> for prompt populated with the current URL.
My point is that with read-string, we don’t need to implement
two distinct commands for that, – either of my patches provides
an empty prompt on ‘G’, yet makes the current page’s URI
(along with a few others, for the second patch) available upon a
keystroke (M-n or <down>.)
[…]
--
FSF associate member #7257 http://boycottsystemd.org/ … 3013 B6A0 230E 334A
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: provide default URIs; be bound to a key
2014-11-19 14:37 ` Ivan Shmakov
2014-11-19 17:31 ` Lars Magne Ingebrigtsen
@ 2014-11-22 19:20 ` Ivan Shmakov
2014-11-23 15:55 ` Lars Magne Ingebrigtsen
1 sibling, 1 reply; 12+ messages in thread
From: Ivan Shmakov @ 2014-11-22 19:20 UTC (permalink / raw
To: 19106
[-- Attachment #1: Type: text/plain, Size: 735 bytes --]
>>>>> Ivan Shmakov <ivan@siamics.net> writes:
Please consider the revised patch MIMEd.
[…]
> One may still wish to customize the order of the entries listed, or
> perhaps to add new ones (think of recognizing, say, RFC 7154 or
> RFC7154 as a link to http://tools.ietf.org/html/rfc7154, for
> instance), but to be convenient, there should probably be a couple of
> helper functions to correspond to the lambdas in the example code
> fragment also MIMEd.
I’ve found that I myself prefer a different order for the
default URIs than my previous patch suggested. Therefore, I’ve
ended up making it fully customizable.
--
FSF associate member #7257 np. Following My Father’s Song — Jami Sieber
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/diff, Size: 3141 bytes --]
--- a/lisp/net/eww.el 2014-11-21 09:21:50 +0000
+++ b/lisp/net/eww.el 2014-11-22 19:05:15 +0000
@@ -29,6 +29,7 @@
(require 'shr)
(require 'url)
(require 'url-queue)
+(require 'url-util) ; for url-get-url-at-point
(require 'mm-url)
(eval-when-compile (require 'subr-x)) ;; for string-trim
@@ -59,6 +60,21 @@
:group 'eww
:type 'string)
+(defcustom eww-suggest-uris
+ '(eww-links-at-point
+ url-get-url-at-point
+ eww-current-url)
+ "List of functions called to form the list of default URIs for `eww'.
+Each of the elements is a function returning either a string or a list
+of strings. The results will be joined into a single list with
+duplicate entries (if any) removed."
+ :version "25.1"
+ :group 'eww
+ :type 'hook
+ :options '(eww-links-at-point
+ url-get-url-at-point
+ eww-current-url))
+
(defcustom eww-bookmarks-directory user-emacs-directory
"Directory where bookmark files will be stored."
:version "25.1"
@@ -101,6 +123,7 @@
:group 'eww
:type '(choice (const :tag "Unlimited" nil)
integer))
+
(defcustom eww-use-external-browser-for-content-type
"\\`\\(video/\\|audio/\\|application/ogg\\)"
"Always use external browser for specified content-type."
@@ -194,12 +218,31 @@
(define-key map "\r" 'eww-follow-link)
map))
+(defun eww-suggested-uris nil
+ "Return the list of URIs to suggest at the `eww' prompt.
+This list can be customized via `eww-suggest-uris'."
+ (let ((obseen (make-vector 42 0))
+ (uris nil))
+ (dolist (fun eww-suggest-uris)
+ (let ((ret (funcall fun)))
+ (dolist (uri (if (stringp ret) (list ret) ret))
+ (when (and uri (not (intern-soft uri obseen)))
+ (intern uri obseen)
+ (push uri uris)))))
+ ;; .
+ (nreverse uris)))
+
;;;###autoload
(defun eww (url)
"Fetch URL and render the page.
If the input doesn't look like an URL or a domain name, the
word(s) will be searched for via `eww-search-prefix'."
- (interactive "sEnter URL or keywords: ")
+ (interactive
+ (let* ((uris (eww-suggested-uris))
+ (prompt (concat "Enter URL or keywords"
+ (if uris (format " (default %s)" (car uris) ""))
+ ": ")))
+ (list (read-string prompt nil nil uris))))
(setq url (string-trim url))
(cond ((string-match-p "\\`file:/" url))
;; Don't mangle file: URLs at all.
@@ -454,6 +504,16 @@
(unless (eq major-mode 'eww-mode)
(eww-mode)))
+(defun eww-current-url nil
+ "Return URI of the Web page the current EWW buffer is visiting."
+ (plist-get eww-data :url))
+
+(defun eww-links-at-point (&optional pt)
+ "Return list of URIs, if any, linked at point."
+ (remq nil
+ (list (get-text-property (point) 'shr-url)
+ (get-text-property (point) 'image-url))))
+
(defun eww-view-source ()
"View the HTML source code of the current page."
(interactive)
@@ -548,6 +608,7 @@
(suppress-keymap map)
(define-key map "q" 'quit-window)
(define-key map "g" 'eww-reload)
+ (define-key map "G" 'eww)
(define-key map [?\t] 'shr-next-link)
(define-key map [?\M-\t] 'shr-previous-link)
(define-key map [delete] 'scroll-down-command)
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#19106: M-x eww: provide default URIs; be bound to a key
2014-11-22 19:20 ` bug#19106: M-x eww: provide default URIs; " Ivan Shmakov
@ 2014-11-23 15:55 ` Lars Magne Ingebrigtsen
0 siblings, 0 replies; 12+ messages in thread
From: Lars Magne Ingebrigtsen @ 2014-11-23 15:55 UTC (permalink / raw
To: Ivan Shmakov; +Cc: 19106
Ivan Shmakov <ivan@siamics.net> writes:
>>>>>> Ivan Shmakov <ivan@siamics.net> writes:
>
> Please consider the revised patch MIMEd.
>
> […]
>
> > One may still wish to customize the order of the entries listed, or
> > perhaps to add new ones (think of recognizing, say, RFC 7154 or
> > RFC7154 as a link to http://tools.ietf.org/html/rfc7154, for
> > instance), but to be convenient, there should probably be a couple of
> > helper functions to correspond to the lambdas in the example code
> > fragment also MIMEd.
>
> I’ve found that I myself prefer a different order for the
> default URIs than my previous patch suggested. Therefore, I’ve
> ended up making it fully customizable.
Thanks; applied (with some changes due to compilation warnings).
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2014-11-23 15:55 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-19 12:01 bug#19106: M-x eww: use the current URI as the default; be bound to a key Ivan Shmakov
2014-11-19 12:17 ` Tassilo Horn
2014-11-19 13:31 ` Ivan Shmakov
2014-11-19 14:37 ` Ivan Shmakov
2014-11-19 17:31 ` Lars Magne Ingebrigtsen
2014-11-19 20:07 ` Ivan Shmakov
2014-11-19 20:27 ` Lars Magne Ingebrigtsen
2014-11-19 20:40 ` Ivan Shmakov
2014-11-22 19:20 ` bug#19106: M-x eww: provide default URIs; " Ivan Shmakov
2014-11-23 15:55 ` Lars Magne Ingebrigtsen
2014-11-19 17:09 ` bug#19106: M-x eww: use the current URI as the default; " Mark Oteiza
2014-11-20 13:45 ` Ivan Shmakov
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.