Revise window splitting/nesting. Fix errors reported by Juanma.
* lisp.h: Extern other_buffer_safely.
* buffer.c: New symbol Qbuffer_list_update_hook.
(Fget_buffer_create, Fmake_indirect_buffer, Frename_buffer)
(Fkill_buffer, record_buffer): Run buffer-list-update-hook.
(other_buffer_safely): New function.
(Frecord_buffer): Mention return value in doc-string.
(Funrecord_buffer): Mention return value in doc-string. Run
buffer-list-update-hook.
(syms_of_buffer): Define Vbuffer_list_update_hook.
* window.h (window): New slot nest.
* window.c: Remove Qsafe, Qabove, Qbelow. Add Qauto_buffer_name.
(select_window): Restore version from Emacs 23 to avoid
clobbering the current buffer when the selected window is
selected. Reported by Juanma Barranquero.
(Fwindow_nested, Fset_window_nested): Remove.
(Fwindow_splits, Fset_window_splits, Fwindow_nest)
(Fset_window_nest): New functions.
(recombine_windows): Use ->nest instead of ->nested.
(window_loop): Call other_buffer_safely
(Fdelete_other_windows_internal): Reset splits status of
remaining window.
(make_parent_window, make_window): Initialize splits and nest
status.
(Fsplit_window_internal): Handle splits and nest status.
(Fdelete_window_internal): Remove bflag. Handle nest status.
(saved_window): Add slots for splits and nest status.
(Fset_window_configuration): Handle auto_buffer_name. Handle
splits and nest status. Reorder code.
(save_window_save): Handle splits and nest status.
(syms_of_window): Rewrite doc-string of window-splits. New
variable window-nest.
* window.el (resize-window): With window-splits nil resize
either left or right sibling to behave more like Emacs 23.
Reported by Juanma Barranquero.
(delete-window, split-window): Simplify code and adapt to new
window-splits/window-nest semantics.
(window-state-get-1, window-state-put-1, window-state-put-2)
(display-buffer-split-window-1)
(display-buffer-split-atom-window): Adapt to new
window-splits/window-nest semantics.
(display-buffer-macro-specifiers, display-buffer-alist): Replace other-visible-frame
by other-frame.
(display-buffer-pop-up-window)
(display-buffer-pop-up-side-window): Reset new window's previous
buffers to nil to avoid that we switch back to the buffer from
the split window when quitting the window.
* menu-bar.el (kill-this-buffer, kill-this-buffer-enabled-p): Do
not offer to kill a buffer when we can't reliably kill it.
* help.el (help-window-display-message): Improve message shown.
* cus-start.el (all): Add entry for window-nest, rework that of
window-splits.
* buff-menu.el (Buffer-menu-select): Bind window-splits to t.
* windows.texi (Splitting Windows): Explain window-splits and
window-nest.
(Displaying Buffers): Replace other-visible-frame by other-frame.
13 files changed: