Aside from that it is really trivial to specify any reasonably complex
layouts as simple lisp structure, with sizes in percent, similar to say
framesets in html:
(setq my-layout '(
(div-v
(30 div-h
(75 top-window-1)
(25 top-window-2)
)
(55 div-h
(25 div-v
(50 sidebar-1)
(25 sidebar-2)
(25 sidebar-3)
)
(75 edit-area)
)
(15 tool-window)
)))
HTML framesets use the `rows' and `cols' attributes to split the screen
vertically and horizontally into frames (Emacs windows).
The above window configuration could be defined by HTML framesets as:
<FRAMESET rows="30%, 55%, 15%">
<FRAMESET cols="75%, 25%">
<FRAME src="top-window-1">
<FRAME src="top-window-2">
</FRAMESET>
<FRAMESET cols="25%, 75%">
<FRAMESET rows="50%, 25%, 25%">
<FRAME src="sidebar-1">
<FRAME src="sidebar-2">
<FRAME src="sidebar-3">
</FRAMESET>
<FRAME src="edit-area">
</FRAMESET>
<FRAME src="tool-window">
</FRAMESET>
That simple thing would be a pretty detailed layout already suited for
almost all purposes (except GUD perhaps).
What's the problem with GUD?
For that of course you need a second set of preferences, that is what
buffer show in what pane: For example, *messages*, *compilation*,
*completion*, etc. can be assigned to "tool-window", *speedbar* to
sidebar-1, *help* on "top-1", files and such to "edit-area", and so on ...
IOW, to "dedicate" a window to a buffer.