From bf60a96bc62eb465a482f5f95859a1147d0003d8 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Mon, 6 Jun 2011 11:09:42 +0200 Subject: [PATCH] Expose window-tree functions in Elisp. (Fwindow_buffer): Move up and rewrite doc-string. (Fwindow_parent, Fwindow_vchild, Fwindow_hchild, Fwindow_next) (Fwindow_prev): New functions. --- src/ChangeLog | 3 +++ src/window.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 503a34626f7..e3ae905bac6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -3,6 +3,9 @@ * window.c (decode_window, decode_any_window): Move up in code. (Fwindowp, Fwindow_live_p): Rewrite doc-strings. (inhibit_frame_unsplittable): Remove unused variable. + (Fwindow_buffer): Move up and rewrite doc-string. + (Fwindow_parent, Fwindow_vchild, Fwindow_hchild, Fwindow_next) + (Fwindow_prev): New functions. 2011-06-06 Paul Eggert diff --git a/src/window.c b/src/window.c index eed7ec6e61a..894775d6aa3 100644 --- a/src/window.c +++ b/src/window.c @@ -169,6 +169,60 @@ A live window is a window that displays a buffer. */) return WINDOW_LIVE_P (object) ? Qt : Qnil; } +DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0, + doc: /* Return the buffer that WINDOW is displaying. +WINDOW can be any window and defaults to the selected one. +If WINDOW is an internal window return nil. */) + (Lisp_Object window) +{ + return decode_any_window (window)->buffer; +} + +DEFUN ("window-parent", Fwindow_parent, Swindow_parent, 0, 1, 0, + doc: /* Return WINDOW's parent window. +WINDOW can be any window and defaults to the selected one. +Return nil if WINDOW has no parent. */) + (Lisp_Object window) +{ + return decode_any_window (window)->parent; +} + +DEFUN ("window-vchild", Fwindow_vchild, Swindow_vchild, 0, 1, 0, + doc: /* Return WINDOW's first vertical child window. +WINDOW can be any window and defaults to the selected one. +Return nil if WINDOW has no vertical child. */) + (Lisp_Object window) +{ + return decode_any_window (window)->vchild; +} + +DEFUN ("window-hchild", Fwindow_hchild, Swindow_hchild, 0, 1, 0, + doc: /* Return WINDOW's first horizontal child window. +WINDOW can be any window and defaults to the selected one. +Return nil if WINDOW has no horizontal child. */) + (Lisp_Object window) +{ + return decode_any_window (window)->hchild; +} + +DEFUN ("window-next", Fwindow_next, Swindow_next, 0, 1, 0, + doc: /* Return WINDOW's right sibling window. +WINDOW can be any window and defaults to the selected one. +Return nil if WINDOW has no right sibling. */) + (Lisp_Object window) +{ + return decode_any_window (window)->next; +} + +DEFUN ("window-prev", Fwindow_prev, Swindow_prev, 0, 1, 0, + doc: /* Return WINDOW's left sibling window. +WINDOW can be any window and defaults to the selected one. +Return nil if WINDOW has no left sibling. */) + (Lisp_Object window) +{ + return decode_any_window (window)->prev; +} + Lisp_Object make_window (void) { @@ -429,14 +483,6 @@ Return nil if window display is not up-to-date. In that case, use -DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0, - doc: /* Return the buffer that WINDOW is displaying. -WINDOW defaults to the selected window. */) - (Lisp_Object window) -{ - return decode_window (window)->buffer; -} - DEFUN ("window-height", Fwindow_height, Swindow_height, 0, 1, 0, doc: /* Return the number of lines in WINDOW. WINDOW defaults to the selected window. @@ -7113,6 +7159,11 @@ frame to be redrawn only if it is a tty frame. */); defsubr (&Spos_visible_in_window_p); defsubr (&Swindow_line_height); defsubr (&Swindow_buffer); + defsubr (&Swindow_parent); + defsubr (&Swindow_vchild); + defsubr (&Swindow_hchild); + defsubr (&Swindow_next); + defsubr (&Swindow_prev); defsubr (&Swindow_height); defsubr (&Swindow_width); defsubr (&Swindow_full_width_p);