emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Windows' "split status"


From: martin rudalics
Subject: Re: Windows' "split status"
Date: Tue, 10 Jan 2012 17:26:35 +0100

>>> But I think this result is just a consequence of the implementation
>>> rather than actual intention.  My impression is that window-nest is
>>> trying to solve a problem which can't be solved with a user-config: it's
>>> trying to provide some kind of way for elisp packages to use parent
>>> windows as a form of "very lightweight sub-frame", without touching much
>>> of their code (e.g. without making their code use parent windows
>>> explicitly).
>>> IIUC the use of window-nest for that purpose only works if the
>>> application limits itself to using 2 windows within that "sub-frame",
>
>> What makes you think that?
>
> Are you saying that my description of the intention behind window-nest
> is wrong?  Or are you only saying that the "at most 2" limitation is not
> really true. while everything else is right?

When using side windows there must be exactly one major non-side window
containing all other non-side windows.  That window can be considered a
"very lightweight sub-frame".  But the number of subwindows of that
window is not limited in any sense.

> I don't actually know what was the intention behind window-nest, so
> confirmation would be welcome.

Your characterization above is OK.  Just that there's no limitation.

>> You can let-bind `window-nest' to t around a
>> split and get an extra parent around the resulting two windows.  After
>> that you can split those windows any which way you want and can get an
>> arbitrary number of windows within a "sub-frame".  The manual explicitly
>> uses the term "always" in the sentence
>
> That sounds like a rather round-about way to do things (because you have
> let-bind the var around some parts of he code, but not all): wouldn't it
> be easier to start with "create a parent window" (which would start
> containing only the selected window) an then proceed to split it the
> usual way.  That would save you from using let-binding.

There are two problems with this:

(1) I invariantly disallow matryoshka windows, so each internal window
    must have at least two children.  Lifting this invariant might have
    tricky consequences.

(2) When deleting a window makes a parent recombinable with its
    siblings, I must be able to suppress that recombination - otherwise
    the "sub-frame" mechanism will break.

>> `window-nest' is aimed at providing a safe low-level mechanism to
>> construct and preserve parent windows.  Everything else can be easily
>> built in Elisp on top of that, like atomic or side windows.
>
> If it's a low-level mechanism, why is it a defcustom, then?

It's a defcustom because earlier it was just a special value of a
precursor of an option now called `window-combination-resize'.  If you
think it's a bad idea, I can always turn it into a plain variable like
`display-buffer-mark-dedicated'.  OTOH, having it always non-nil makes
the behavior of window deletions more predictable as explained in the
manual.

> If it's aimed at "construct and preserve", why is it a variable, rather
> than a function?

It's a variable _and_ a slot in the window structure and it's used like
`display-buffer-mark-dedicated': Usually for one single call but there's
no harm if someone wants all windows be dedicated or all parent windows
have only two children.

martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]