Yesterday's work was a huge step forward.  It provides a solid platform for 
studying pyzo within Leo.

I'm glad I wrote up yesterday's work last night, because soon afterwards I 
got several big shocks:

1. The init code (in the pyzo plugin) is unsound when there are multiple 
Leo outlines!

Leo should create pyzo docks at the end of startup ("start2" time) rather 
than after loading an outline ("after-create-leo-frame" time).

2. Only a single, global, copy of each of *Leo's docks* should exist.

With the exception of Leo's Log pane, there is no reason at all to create 
per-outline docks.

This post discusses these surprises, and propose a new gui. All Leo users 
should be aware of the proposed changes.  Feel free to ignore the details.

*The pyzo plugin improperly inits pyzo*

Alas, the code (in the plugin) that inits pyzo code is unsound when there 
are multiple outlines. The plugin re-initializes vars like pyzo.main, 
pyzo.editors, pyzo.shells, etc. for each new outline!  This has no chance 
of working.  Pyzo assumes that only one copy of these vars exists.


*All docks should be singletons, shared between outlines*

This was the initial surprise.  With the pyzo_in_leo plugin enabled, creating 
a new outline creates an all-new set of docks! This would be extremely 
annoying for the user, who would then have to reposition or hide all the 
newly-created docks.

Yes, Leo's "new" command could hide all (pyzo) docks, but would be a hack. 
As I considered alternatives, I suddenly saw that pyzo only uses one copy 
of each of its docks.  I then saw that the pyzo_in_leo plugin's init code 
is unsound, as describe above.

Finally, I saw that it's silly to create separate Leo panes/docks for each 
new outline.  The only exception is the Log pane. There *are* (minor) 
advantages to having a separate log pane/dock for each outline.

*The proposed gui*

- There will be a single *Outlines dock*, similar to Pyzo's Editors dock, 
containing one tab for each Leo outline.

- There *might *be a single *Bodies dock*, containing one tab for each body 
editor.

- Leo's *Log dock* *might* be shared among all of Leo's outlines. An 
alternative would be to switch the contents of the Log dock when switching 
outlines. We shall see...

*Implications*

The visual changes are minor. Most users will hardly notice them.

Few users presently configure docks differently for different outlines.  
Most users will welcome having a single arrangement for all docks.

My biggest concern is that Leo's scripting api might change.  Existing 
Leonine scripts must continue to work. The acid test will be Leo's console 
gui plugin.

*Summary*

Leo's gui *must *change to accommodate pyzo. Happily, this is worth doing 
on its own merits. 

All docks (both Leo's and pyzo's) will be shared between outlines (and pyzo 
editors). Docks won't move when changing outlines. A single Outline dock 
will contain all Leo outlines, each in its own tab.

This project will be done in a new "gui" branch. There will be a long 
period of testing. Compatibility with existing scripts will be maintained 
as much as possible. This will be the next phase of the pyzo in Leo project.

Edward

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/3f7783b2-250e-49bb-b040-27f4ba3e5096%40googlegroups.com.

Reply via email to