Hi all,

There have been a number of requests through the years of this project for
a way to change the order of buffers within a window.  We have had at
least a couple of patches submitted to implement this, but there has
always been a large, but perhaps subtle, problem with the design that
needed to be addressed before committing to adding the feature.  Indeed
calling it a "feature" is a little misleading because when you think about
its implications, it really goes to the core design of the UI.  I've just
completed an implementation of buffer-moving that addresses the big
problem, and it is available in the branch 'buffer-ordering' of our main
git repo:

  git://repo.or.cz/conkeror.git

The big problem that needed to be addressed was a question of the
coherency of the UI when you introduce the concept that buffers have
spatial relationships to each other.  Heretofore, the primary order of
buffers within a window has been their temporal relationship, order by
access time.  Although buffers do have a certain spatial order which can
be visualized by tabs or in the read-buffer completions list, this was
really more of a side-effect than an intentional design.  Tabs have been
considered as something of an unwanted stepchild because of the logical
contradictions they raise with the emacs-based paradigm of the rest of the
UI.

To understand the conflict, it is useful to consider the 'bury-buffer'
command, which like its emacs analog, banishes a buffer to the end of the
access-time list.  If we now decide once and for all that buffers do
indeed have a spatial ordering that is to be considered as primary, what
becomes of bury-buffer?  Does bury-buffer now become the unwanted
stepchild, a relic with no practical purpose in a space-oriented UI?  In a
spatially oriented UI, bury-buffer must have a spatial meaning in addition
to its temporal one, but *where* is "buried"?

The way out of the problem is to consider the default ordering of new
buffers.  The end of the buffer-list is the natural place for buried
buffers to go, but if new buffers are also created in that position, we
find ourselves with an illogical UI.  So here is the idea that I've
implemented in the buffer-ordering branch:

 * When you open an url or a webjump in a new buffer, the new buffer opens
   at the front of the list. (on the left side, in terms of tabs)

 * When you follow a link or other DOM object in a new buffer, the buffer
   containing that link or object is called the "opener", and the new
   buffer is created to the immediate right of its opener.

I have been especially mindful in developing this that there is no "one
size fits all" when it comes to buffer ordering.  Different people may
have different preferences, so I've left room for making the ordering
configurable, once we have a better idea of what users' needs are.

I think that's about all.  Please try the branch, and share your comments
and ideas.

-- 
John Foerch
_______________________________________________
Conkeror mailing list
[email protected]
https://www.mozdev.org/mailman/listinfo/conkeror

Reply via email to