emacs-devel
[Top][All Lists]
Advanced

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

Re: The future of Follow Mode - a proposal.


From: Eli Zaretskii
Subject: Re: The future of Follow Mode - a proposal.
Date: Fri, 19 Feb 2016 18:30:01 +0200

> Date: Fri, 19 Feb 2016 15:56:22 +0100
> From: Anders Lindgren <address@hidden>
> Cc: Alan Mackenzie <address@hidden>, emacs-devel <address@hidden>
> 
> Windows of unequal width is something that we need to live with, at least if 
> follow-mode is something that a
> user can enable without affecting the layout of a frame, like today.

My suggestion is that enabling the mode will equalize the width of all
the windows under Follow mode.

> Anyway, wouldn't it be possible for the display engine to do the layout of 
> the leftmost window (of a follow mode
> window group) using the normal system for finding a suitable start location 
> on even line boundaries. The rest
> of the windows in the window group could then use the end position of the 
> previous window.

This would mean the order in which we display windows will have to be
forced to follow the Follow mode order.  Moreover, it would mean that
the decisions of whether to redisplay a certain window will now have
to consider other windows, something that doesn't happen today.

Moreover, the starting point of the window is just the tip of the
iceberg.  The display engine uses the move_it_* family of functions to
decide where the window starts and ends, when to scroll the window,
whether point is visible or not, etc.  We also use these functions for
user-level window scrolling and in vertical-motion.  All of that code
assumes that the window width doesn't change beyond window edges.
Invalidating this assumption wreaks havoc in many places, so these
functions will have to be rewritten to take the fact that text in the
next window uses a different width.  See the discussion of
vertical-motion we had with Alan several months ago -- while working
on the patch I presented there, I realized that this feature is
unworkable as long as the display engine was not taught to handle
unequal-width windows.

> In fact, I think it could be supported today from lisp if only it was 
> possible to disable the part of the display
> engine that ensures that the window start position is an even multiple of the 
> window width, on a
> window-by-window basis. In the case of follow-mode, the leftmost window 
> should keep it enabled, whereas
> the rest should disable this feature.

The current display engine likes the window start point to be at the
beginning of a physical line.  Lifting this restriction also requires
changes, because currently, even if you trick the display into using a
starting point in the middle of a line, it is likely to reset that to
the line beginning on the next redisplay cycle.

IOW, without changes in the display engine, we will be making a series
of questionable kludges one upon the other.  That's hardly the way to
develop Emacs.

I understand the desire to avoid significant changes in the design of
the display engine, but I see no way this could work reliably, unless
we force all the Follow-mode windows to be of equal width (in
character units).

> (The only thing that wouldn't work is if a multi-width character (like 
> control-l "^L") is partially visible. It will
> continue to work like today, with "^" visible at the end of one window and 
> "^L" at the start of the next.)

Control characters are not the only ones which will bump into this.



reply via email to

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