all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs as word processor
Date: Fri, 22 Nov 2013 22:06:23 +0100	[thread overview]
Message-ID: <416D7143-AE4A-45FF-A3A3-AA208D268D97@informatimago.com> (raw)
In-Reply-To: <83txf4cw9z.fsf@gnu.org>


On 2013/11/22, at 16:04 , Eli Zaretskii wrote:

>> From: "Pascal J. Bourguignon" <pjb@informatimago.com>
>> Date: Fri, 22 Nov 2013 01:51:37 +0100
>> 
>> - define a page size + page margins for the document.
> 
> IMO, this is more important for printing.  For display, it's enough to
> start with the locale's defaults.

My point is that WYSIWIG doesn't mean anything when you don't consider an "external" medium.

Paper, PDF file, web page.

Paper and PDF files are mostly the same, rendering on a web page is different (the pagination differs).

Page size is important to a document, because unfortunately, automatic layout cannot take decisions like reordering paragraphs or figures, and editing paragraphs so that they fit on a page.

And again, THIS is the only reason why WYSIWIG as some value.


If you want to consider webpages, I'd say that nowadays you would still have to consider the size of the area where the document is to be rendered, since web designers tend to enforce fixed frames, instead of letting the browser flow the text to the random window size.  This is a fact of life.  So you may also have to set at least a page width to edit WYSIWIGLY a web page.



>> - define header, body and footer areas of the pages.  They can be
>>  specified with versions for odd and even pages, and with alternate
>>  versions for pages beginning chapters or sections.  They can also
>>  contain dynamic parts (eg. foot notes from text laid out on a page may
>>  be inserted in the footer of the page).
>> 
>>  Since headers and footers can be edited with styles too, editing them
>>  would have to call up secondary WYSIWIG windows.
> 
> Separate windows could be a solution, but it would be much more cool
> to do what the word processors do: make the rest of the page
> un-editable, and dim it to make that apparent, then let you edit only
> the header/footer part.

Possibly.  This is a user interface question that can be solved later.  What I wanted to point out, is that headers and footers, like styles, are a-priori independent of the page or even the document they appear in.


>> - define styles, apply styles to tags.
> 
> Isn't a "style" just another word for a "face"?

For a character, perhaps.  For higher level nodes, a style may be more complex, up to procedural styles, were you call up a lisp function to "font-lock" and justify the node (paragraph, chapter, etc).  For paragraphs you would have margins and indentations and perhaps drop cap styles, etc.


>> - assign parenthesized tags to text ranges (in a hierarchical structure
>>  similar to SGML).
> 
> Not sure what for.  This is a solution to what problem?

What I mean here is some kind of structured editing.

To split a paragraph in two, we can admit the usual RET key.

To split a section in two, we can admit the usual insertion of a section title.
But already here, most probably the user will enter a new paragraph containing the section title, and then select it and apply a header "style".  Well, it's not style, it's the specification of a section header tag to this text, and by inference, the spitting of the current section in two.

Those two examples have conventional "width of the ass of the horse" user interfaces, for conventional pre-defined tags: <section> <title> <para>.

But with the introduction of XSL and DTD, the user can be allowed to edit documents with a structure not pre-wired, with tags having now pre-defined conventional user interface.  

Therefore we need a standard way to edit the document tree.

In case of sexps, we use paredit.  What do we use to edit a tree that is invisible, but thru its typographied and laid yout leaves?





>> - then for the WYSIWIG aspect, we'd need to implement a rendering
>>  engine.  We have the basis with font faces, but more work is needed to
>>  give a WISIWIG representation of the page, and its computed layout.
> 
> I think you underestimate the power and feature-richness of the
> current Emacs display engine.  We should try using it first, before we
> decide that it is inadequate and should be replaced or significantly
> changed.

Perhaps.  It's true that with truncate-lines mode, we'd get a a homothetic space, but can we adjust the height of the lines, can we adjust margins (to subpixel sizes). We'd have to disable removing truncate-lines mode, and we'd have to ensure that changing the line count or line height doesn't change the page height.

I've not read the source, perhaps it's already implemented, but I've never seen in the behavior of emacs display engine indications that it's able to change characters in a page without shifting everything beyond them.


>>  Scrolling and zooming would behave differently in those WISIWIG
>>  windows, since they're would contain essentially a graphic
>>  representation of the page, like when we render PDF files.
> 
> I see no need for abandoning graphical text display we use now.

WYSIWIG.

What we have now is not.


> None of the leading word processors does, AFAIK.  Switching to displaying
> pictures has many drawbacks; e.g., you cannot easily copy/paste with
> it, and the display complexities will grow by orders of magnitude, for
> now good reason.

Any WYSIWIG word processor displays a picture on the screen, and let you edit the underlying text data structure.  Even emacs does just that, only it has a more direct correspondance between character cells on screens and character slots in the buffer.

For example, in scrolling a word processor let you scroll pixel by pixel, while emacs let you only scroll line by line, even in the splash window.

Just take a good look at any WYSIWIG word processor window, and count the character pixels vs. the graphic pixels.  There's a lot of graphics on them: rulers, margins, 


>>  Page margins, paragraph margins (set in the paragraph style), and
>>  other elements could have graphical controllers overlaid for GUI
>>  interaction, as well as being editable with normal keyboard commands,
>>  like the scroll-bar, menu-bar and tool-bar options.
> 
> We have the fringes and the display margins for that, we just need to
> use them.

WYSIWIG.


I wouldn't mind a text editor that would let us edit enriched text. 
But strangely, I doubt that would attract new users.



>> One problem is that there are parts that have a lot of editable
>> metadata, but which are not represented at all in a WYSIWIG document.
>> That's the reason why people have so much a hard time to use and apply
>> styles with word processors: they presence and definition is hidden,
>> since they're not "printed out", only their effect is visible.
>> 
>> A solution in emacs could be to use a second window, a metadata window
>> (a little like a minibuffer, but probably bigger), that would appear
>> automatically when editing a WYSIWIG window, so that when moving the
>> cursor on a cell in the WYSIWIG window, style and other metadata can be
>> displayed in the metadata window, and editing commands can then be given
>> that modify the metadata and are reflected WYSIWIGLY in the WYSIWYG
>> window.
> 
> The leading word processors have this feature, so we should have that
> as well.  It doesn't have to be another window, though: we could show
> the meta-data and control codes as part of the text.

Well, not part of the text, that would defeat the WYSIWIG aspect, but they may be represented graphically, overlaid on or around the text.  There may be tip tool boxes, and stuff.

Now, some web editors provide three views of the document:

- WYSIWIG web page, rendered just like in a browser, but editable as in any word processor.

- tagged document, where the web page is still rendered like in a browser, but each element is adorned with a graphic tag that can be manipulated (selected, edited, moved around, etc).

- plain text editor of the HTML.


I would say that this solution works well enough, you can switch easily from one view to another depending on the kind of editing action you want to perform at the moment, and you have full access to all the levels.

But in a way, it represents the failure of the WYSIWIG word processor, since as soon as you have something more complex than MacWrite, basically, you have to revert to a structured editor, or to a plain text editor.

For us programmers it would be a good and nice solution.

But users can't deal with the structured view and much less with the "code" of the HTML text view.

So I think we should try to find a solution to let plain users perform structural editing of their documents and style sheets easily, in a WYSIWIG editor.  But indeed perhaps there's no other solution than to present alternative, lower level  and non WYSIWIG views.



>> In terms of user interface this kind of word processor also has this
>> problem: you have to have a duplicate set of commands for the metadata
>> than for the data.
>> 
>> When you edit plain text, or plain text with markup (either "implicit"
>> thru formating like in reStructured Text or markdown, or tagged text in
>> the SGML family), you use the same command set to edit both the data and
>> the metadata.  Even to edit both at the same time!  
>> 
>>    M-x replace-string RET <p>The RET <br>And the RET
>> 
>> But in the case if a WYSIWIG word processor, as long as we don't provide
>> a plain text data+metadata buffer to be edited in emacs as plain text,
>> we need to define two sets of commands, since basically we have in the
>> WYSIWIG window only the data (which can edited with usual emacs text
>> editing commands), and in the metadata window, only the metadata of the
>> current cell (or the current path of metadata nodes from the root of the
>> document down to the current cell, in the document structural
>> hierarchy).
> 
> It's much better to have the same command do both.  We could implement
> heuristics that would guess the user intent most of the time, with
> user options to override that as needed.  Most users will not need nor
> want to edit the formal description of the style, be it XML or
> whatever.  They will settle for a Customize way of personalizing the
> styles.

Yes, or use predefined style sheets and document structures.


-- 
__Pascal Bourguignon__
http://www.informatimago.com







  parent reply	other threads:[~2013-11-22 21:06 UTC|newest]

Thread overview: 239+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-17  7:28 Emacs as word processor Richard Stallman
2013-11-17  8:18 ` Jambunathan K
2013-11-18 18:44   ` Richard Stallman
2013-11-18 22:12     ` Rasmus
2013-11-19  6:02       ` Richard Stallman
2013-11-19  8:01         ` joakim
2013-11-19 23:42           ` Richard Stallman
2013-11-20  6:54             ` joakim
2013-11-20 18:01               ` Lennart Borgman
2013-11-23  6:07               ` Richard Stallman
2013-11-19 10:57         ` Jambunathan K
2013-11-19 12:20           ` Thorsten Jolitz
2013-11-19 14:35             ` Jambunathan K
2013-11-19 13:28         ` Sivaram Neelakantan
2013-11-20 18:35           ` Richard Stallman
2013-11-26  8:38     ` Tom
2013-11-26 15:58       ` Richard Stallman
2013-11-26 23:08         ` Bastien
2013-11-26 23:26           ` Lennart Borgman
2013-12-15 16:16         ` Steinar Bang
2013-11-17 11:16 ` Daniel Colascione
2013-11-17 13:02   ` Nic Ferrier
2013-11-17 13:55     ` Lennart Borgman
2013-11-17 14:15       ` Juergen Fenn
2013-11-17 18:57         ` chad
2013-11-18  4:20   ` Richard Stallman
2013-11-18  5:06     ` Stephen J. Turnbull
     [not found]       ` <"<l6dsng$6h4$1"@ger.gmane.org>
     [not found]         ` <"<87mwl04w3k.fsf"@zigzag.favinet>
     [not found]       ` <l6dsng$6h4$1"@ger.gmane.org>
     [not found]         ` <87mwl04w3k.fsf"@zigzag.favinet>
2013-11-18 18:44       ` Richard Stallman
2013-11-18 19:42         ` Sean Sieger
2013-11-18 19:46           ` Sean Sieger
2013-11-19  6:01           ` Richard Stallman
2013-11-19  7:08             ` Andreas Röhler
2013-11-18 20:19         ` Allen S. Rout
2013-11-19  6:02           ` Richard Stallman
2013-11-19  8:46             ` Thien-Thi Nguyen
2013-11-19  9:39               ` Jambunathan K
2013-11-19 11:21               ` Jambunathan K
2013-11-19 14:35               ` Allen S. Rout
2013-11-19 15:54                 ` Thien-Thi Nguyen
2013-11-20 18:35                   ` Richard Stallman
2013-11-21 15:25                     ` Thien-Thi Nguyen
2013-11-21 16:18                       ` Eli Zaretskii
2013-11-21 21:27                       ` Richard Stallman
2013-11-21 22:03                         ` Lennart Borgman
2013-11-22  0:51                         ` Pascal J. Bourguignon
2013-11-22  6:37                           ` Stephen J. Turnbull
2013-11-22 21:06                             ` Pascal J. Bourguignon
2013-11-22 15:04                           ` Eli Zaretskii
2013-11-22 15:26                             ` Davis Herring
2013-11-22 16:06                               ` Lennart Borgman
2013-11-22 17:56                               ` Eli Zaretskii
2013-11-22 19:01                                 ` John Yates
2013-11-22 21:17                                   ` Eli Zaretskii
     [not found]                                     ` <CAJnXXoi2biZ0uOAB9s-0Y5=9EujpCV4a=CemR-K+wHeJVSB51A@mail.gmail.com>
     [not found]                                       ` <83a9gvcyq3.fsf@gnu.org>
2013-11-23 15:13                                         ` John Yates
2013-11-23 15:24                                           ` Eli Zaretskii
2013-11-23 16:43                                             ` Lennart Borgman
2013-11-23 17:52                                               ` Eli Zaretskii
2013-11-23 21:12                                                 ` Lennart Borgman
2013-11-25 17:51                                             ` John Yates
2013-11-25 18:02                                               ` Lennart Borgman
2013-11-25 18:40                                                 ` Eli Zaretskii
2013-11-25 18:54                                                   ` Lennart Borgman
2013-11-25 18:52                                               ` Jambunathan K
2013-11-26  7:26                                                 ` Jambunathan K
2013-11-22 21:06                             ` Pascal J. Bourguignon [this message]
2013-11-22 21:38                               ` Eli Zaretskii
2013-11-22 22:01                                 ` John Yates
2013-11-22 22:56                                   ` Pascal J. Bourguignon
2013-11-23  7:55                                   ` Eli Zaretskii
2013-11-22 22:53                                 ` Pascal J. Bourguignon
2013-11-23  8:22                                   ` Eli Zaretskii
2013-11-23 13:42                                     ` Pascal J. Bourguignon
2013-11-24  8:13                                       ` PJ Weisberg
2013-11-24 17:44                                         ` Drew Adams
2013-11-25 20:42                                     ` Allen S. Rout
2013-11-25 21:15                                       ` Eli Zaretskii
2013-11-25 21:21                                         ` Allen S. Rout
2013-11-25 21:54                                         ` Pascal J. Bourguignon
     [not found]                     ` <<877gc14vzs.fsf@zigzag.favinet>
     [not found]                       ` <<E1Vjbn0-0005Bd-4Z@fencepost.gnu.org>
2013-11-21 22:12                         ` Drew Adams
2013-11-22  7:34                           ` Eli Zaretskii
2013-11-22 13:56                             ` Stefan Monnier
2013-11-22 14:48                               ` Eli Zaretskii
2013-11-22 14:50                                 ` Lennart Borgman
2013-11-22 15:39                                 ` Yuri Khan
2013-11-22 16:07                                   ` John Yates
2013-11-23  6:06                                     ` Richard Stallman
2013-11-23  8:07                                       ` Eli Zaretskii
2013-11-23 21:12                                         ` Richard Stallman
2013-11-24  4:53                                           ` Eli Zaretskii
2013-11-24 18:37                                             ` Richard Stallman
2013-11-24 20:21                                               ` Eli Zaretskii
2013-11-24 20:52                                                 ` Lennart Borgman
2013-11-24 21:06                                                 ` Thien-Thi Nguyen
2013-11-24 21:10                                                   ` Eli Zaretskii
2013-11-25  2:15                                                     ` Stephen J. Turnbull
2013-11-25  3:55                                                       ` Eli Zaretskii
2013-11-25  5:20                                                         ` Stephen J. Turnbull
2013-11-25 17:39                                                           ` Eli Zaretskii
2013-11-26  2:35                                                             ` Stephen J. Turnbull
2013-11-26  3:58                                                               ` Eli Zaretskii
2013-11-26  7:05                                                                 ` Stephen J. Turnbull
2013-11-26 15:34                                                                   ` John Yates
2013-11-26 16:57                                                                     ` Lennart Borgman
2013-11-26 18:47                                                                       ` John Yates
2013-11-26 15:04                                                               ` Drew Adams
2013-11-26 19:51                                                                 ` Pascal J. Bourguignon
2013-11-26 20:36                                                                   ` Drew Adams
2013-11-26 19:48                                                               ` Emacs as word processor / Text Properties Pascal J. Bourguignon
2013-11-27  2:35                                                                 ` Richard Stallman
2013-11-27 22:26                                                                 ` T.V. Raman
2013-11-27 23:01                                                                   ` Drew Adams
2013-11-27 23:06                                                                     ` T.V. Raman
2013-11-27 23:48                                                                       ` Drew Adams
2013-11-28  0:50                                                                         ` T.V. Raman
2013-11-28  1:27                                                                           ` Lennart Borgman
2013-11-28  4:04                                                                             ` Stephen J. Turnbull
2013-11-28  6:03                                                                               ` Drew Adams
2013-11-28  7:13                                                                                 ` Stephen J. Turnbull
2013-11-28  7:34                                                                                 ` Bastien
2013-11-28  8:53                                                                                   ` Andreas Röhler
2013-11-29  8:44                                                                           ` Jambunathan K
2013-11-29  8:49                                                                             ` Jambunathan K
2013-11-29  8:52                                                                               ` Bastien
2013-11-29  9:01                                                                                 ` Jambunathan K
2013-11-29  9:05                                                                                   ` Bastien
2013-11-29  9:10                                                                             ` Eli Zaretskii
2013-11-29  9:51                                                                               ` Jambunathan K
2013-11-29 11:43                                                                                 ` Eli Zaretskii
2013-11-29 13:42                                                                                   ` Jambunathan K
2013-11-29 14:25                                                                                     ` Eli Zaretskii
2013-11-29 16:47                                                                                       ` Jambunathan K
2013-11-29 19:38                                                                                         ` Eli Zaretskii
2013-11-29 14:18                                                                                   ` Jambunathan K
2013-11-29 15:22                                                                                     ` Eli Zaretskii
2013-11-29 10:06                                                                             ` Andreas Röhler
2013-11-29  6:50                                                                   ` Jambunathan K
2013-11-30  1:09                                                                     ` Richard Stallman
2013-12-02 20:04                                                               ` Emacs as word processor Hendrik Boom
2013-11-25  3:06                                                   ` Yuri Khan
2013-11-26  0:04                                                     ` Richard Stallman
2013-11-22 17:58                                   ` Eli Zaretskii
2013-11-23  0:00                                     ` Stefan Monnier
2013-11-23  6:06                               ` Richard Stallman
2013-11-23  6:05                             ` Richard Stallman
2013-11-23  6:05                           ` Richard Stallman
2013-12-15 16:39                     ` Steinar Bang
2013-12-16 17:19                       ` Richard Stallman
2013-12-16 18:02                         ` Jambunathan K
2013-12-16 18:38                         ` Allen S. Rout
2013-12-17 10:52                           ` Richard Stallman
2013-12-17 11:39                             ` Steinar Bang
2013-12-16 19:10                         ` Steinar Bang
2013-12-17 10:52                           ` Richard Stallman
2013-12-16 20:37                         ` Juan M. Gonzalez
2013-12-17 10:53                           ` Richard Stallman
2013-12-17 11:41                             ` Steinar Bang
2013-12-17 11:48                             ` Achim Gratz
2013-12-17 12:22                               ` Steinar Bang
2013-12-17 21:06                               ` Richard Stallman
2013-12-19  7:28                                 ` Bastien
2013-12-19 18:23                                   ` Richard Stallman
2013-12-19 18:45                                     ` Bastien
2013-12-19 23:24                                   ` Xue Fuqiao
2013-11-20 18:35                 ` Richard Stallman
2013-11-21  6:02                   ` Stephen J. Turnbull
2013-11-21 14:34                     ` Allen S. Rout
2013-11-21 21:16                       ` Tom
2013-11-22  6:54                         ` Richard Stallman
2013-11-22  7:22                           ` Ivan Andrus
2013-11-22 13:26                       ` Rüdiger Sonderfeld
2013-11-22  6:54                     ` Richard Stallman
2013-11-20 18:35               ` Richard Stallman
2013-11-20 18:53                 ` Eli Zaretskii
2013-11-21  8:00                   ` Andreas Röhler
2013-11-21 16:21                     ` Eli Zaretskii
2013-11-21 18:34                       ` Andreas Röhler
2013-11-21 19:06                         ` Eli Zaretskii
2013-11-22  7:28                           ` Andreas Röhler
2013-11-21  9:15                   ` Bastien
2013-11-21  9:22                     ` Bastien
2013-11-21 16:26                     ` Eli Zaretskii
2013-11-21 17:43                       ` Bastien
2013-11-22 10:18                         ` Eli Zaretskii
2013-11-22 20:44                         ` Thorsten Jolitz
2013-11-22  6:54                     ` Richard Stallman
2013-11-22  7:48                       ` Eli Zaretskii
2013-11-22  7:52                         ` Bastien
2013-11-22 11:36                       ` Rasmus
2013-11-19  8:04         ` Stephen J. Turnbull
2013-11-19 23:42           ` Richard Stallman
2013-11-19  9:02         ` Christoph
2013-11-19 19:22           ` chad
2013-11-20 18:35             ` Richard Stallman
2013-11-18 13:59     ` Rasmus
2013-11-17 15:27 ` Andreas Röhler
2013-11-18 17:26 ` Christopher Allan Webber
2013-11-18 17:31   ` Tom Tromey
2013-11-19  9:20     ` Jambunathan K
2013-11-19  6:01   ` Richard Stallman
2013-11-19  7:44     ` Andreas Röhler
2013-11-19 13:32     ` Jay Belanger
2013-11-19 15:16     ` Lennart Borgman
2013-11-20  1:50     ` Pascal J. Bourguignon
2013-11-20 18:35       ` Richard Stallman
2013-12-15 17:28     ` Steinar Bang
2013-12-15 18:18       ` Stephen J. Turnbull
2013-12-16  0:17         ` T.V. Raman
2013-12-16 10:20           ` Juan M. Gonzalez
2013-11-19  6:14   ` Stephen J. Turnbull
2013-11-22 16:19 ` Karl Voit
2013-11-22 18:18   ` Eli Zaretskii
2013-11-24 11:11     ` Emacs will never be a WYSIWYG-editor and should not try to (was: Emacs as word processor) Karl Voit
2013-11-24 15:01       ` Emacs will never be a WYSIWYG-editor and should not try to Thien-Thi Nguyen
2013-11-24 16:53       ` Eli Zaretskii
2013-11-24 17:27         ` Pascal J. Bourguignon
2013-11-25 12:24         ` Richard Stallman
2013-11-26  7:01           ` Bastien
2013-11-26  9:10             ` Andreas Röhler
2013-11-26  9:15               ` Bastien
2013-11-26  9:34                 ` Andreas Röhler
2013-11-26  9:34                   ` Bastien
2013-11-26 15:58               ` Richard Stallman
2013-11-26 18:28                 ` Andreas Röhler
2013-11-26 21:45                   ` Achim Gratz
2013-11-27  7:44                     ` Andreas Röhler
2013-11-26 15:58             ` Richard Stallman
2013-11-26 21:33               ` Achim Gratz
2013-11-24 18:36       ` Emacs will never be a WYSIWYG-editor and should not try to (was: Emacs as word processor) Richard Stallman
2013-11-23  6:06   ` Emacs as word processor Richard Stallman
2013-12-02 19:30 ` Hendrik Boom
2013-12-03  6:24   ` Thien-Thi Nguyen
2013-12-03  9:54   ` René Kyllingstad
2013-12-03 11:36     ` Jambunathan K
2013-12-03 16:32       ` T.V. Raman
2013-12-03 17:45         ` Eli Zaretskii
2013-12-08 17:08       ` Andreas Röhler
2013-12-13 22:28 ` Juan M. Gonzalez
  -- strict thread matches above, loose matches on Subject: below --
2013-11-23 21:03 Anas R.
2013-11-25 12:25 ` Richard Stallman
     [not found] <"<E1Vhwmp-0001x4-Pa"@fencepost.gnu.org>
     [not found] <E1Vhwmp-0001x4-Pa"@fencepost.gnu.org>

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=416D7143-AE4A-45FF-A3A3-AA208D268D97@informatimago.com \
    --to=pjb@informatimago.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.