X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b0d4743ac302fb5d852712b9095d1943c87a41c0..9f6a7e77d9d9f0547bf0d1177bdc9d486a8f509a:/lispref/windows.texi diff --git a/lispref/windows.texi b/lispref/windows.texi index 7ff3c8e86e..158ab35405 100644 --- a/lispref/windows.texi +++ b/lispref/windows.texi @@ -97,6 +97,15 @@ the mark @item how recently the window was selected + +@item +fringe settings + +@item +display margins + +@item +scroll-bar settings @end itemize @cindex multiple windows @@ -149,6 +158,7 @@ This function splits @var{window} into two windows. The original window @var{window} remains the selected window, but occupies only part of its former screen area. The rest is occupied by a newly created window which is returned as the value of this function. +This function returns the newly created window. If @var{horizontal} is non-@code{nil}, then @var{window} splits into two side by side windows. The original window @var{window} keeps the @@ -291,8 +301,7 @@ You could define a simplified version of the function like this: This function returns non-@code{nil} if there is only one window. The argument @var{no-mini}, if non-@code{nil}, means don't count the minibuffer even if it is active; otherwise, the minibuffer window is -included, if active, in the total number of windows, which is compared -against one. +counted when it is active. The argument @var{all-frames} specifies which frames to consider. Here are the possible values and their meanings: @@ -401,11 +410,15 @@ This function returns the selected window. This is the window in which the cursor appears and to which many commands apply. @end defun -@defun select-window window +@defun select-window window &optional norecord This function makes @var{window} the selected window. The cursor then appears in @var{window} (on redisplay). The buffer being displayed in @var{window} is immediately designated the current buffer. +Normally @var{window}'s selected buffer is moved to the front of the +buffer list, but if @var{norecord} is non-@code{nil}, the buffer list +order is unchanged. + The return value is @var{window}. @example @@ -418,18 +431,22 @@ The return value is @var{window}. @end defun @defmac save-selected-window forms@dots{} -This macro records the selected window, executes @var{forms} -in sequence, then restores the earlier selected window (unless that -window is no longer alive). - -This macro does not save or restore anything about the sizes, arrangement -or contents of windows; therefore, if the @var{forms} change them, -the change persists. - -Each frame, at any time, has a window selected within the frame. This -macro saves only @emph{the} selected window; it does not save anything -about other frames. If the @var{forms} select some other frame and -alter the window selected within it, the change persists. +This macro records the selected window of each frame, executes +@var{forms} in sequence, then restores the earlier selected windows. + +This macro does not save or restore anything about the sizes, +arrangement or contents of windows; therefore, if the @var{forms} +change them, the change persists. If the previously selected window +of some frame is no longer live at the time of exit from this form, +that frame's selected window is left alone. +@end defmac + +@defmac with-selected-window window forms@dots{} +This macro selects @var{window} (without changing the buffer list), +executes @var{forms} in sequence, then restores the previously +selected window (unless that window is no longer alive). It is similar +to @code{save-selected-window} except that it explicitly selects +@var{window} and that it does not alter the buffer list sequence. @end defmac @cindex finding windows @@ -550,6 +567,9 @@ must ensure @var{window} is in a visible frame.) @item 0 Consider all windows in all visible or iconified frames. +@item a frame +Consider all windows on that frame. + @item anything else Consider precisely the windows in @var{window}'s frame, and no others. @end table @@ -635,7 +655,7 @@ The functions described there are easier to use than these, but they employ heuristics in choosing or creating a window; use these functions when you need complete control. -@defun set-window-buffer window buffer-or-name +@defun set-window-buffer window buffer-or-name &optional keep-margins This function makes @var{window} display @var{buffer-or-name} as its contents. It returns @code{nil}. This is the fundamental primitive for changing which buffer is displayed in a window, and all ways @@ -647,6 +667,12 @@ of doing that call this function. @result{} nil @end group @end example + +Normally, displaying @var{buffer} in @var{window} resets the window's +display margins, fringe widths, scroll bar settings, and position +based on the local variables of @var{buffer}. However, if +@var{keep-margins} is non-@code{nil}, the display margins and fringe +widths of @var{window} remain unchanged. @xref{Fringes}. @end defun @defun window-buffer &optional window @@ -792,6 +818,8 @@ This function makes @var{buffer-or-name} the current buffer and switches to it in some window, preferably not the window previously selected. The ``popped-to'' window becomes the selected window within its frame. The return value is the buffer that was switched to. +If @var{buffer-or-name} is @code{nil}, that means to choose some +other buffer, but you don't specify which. If the variable @code{pop-up-frames} is non-@code{nil}, @code{pop-to-buffer} looks for a window in any visible frame already @@ -935,7 +963,7 @@ splits a window or reuses one. @end defopt @c Emacs 19 feature -@defvar pop-up-frame-function +@defopt pop-up-frame-function This variable specifies how to make a new frame if @code{pop-up-frames} is non-@code{nil}. @@ -944,7 +972,7 @@ Its value should be a function of no arguments. When function, which should return a frame. The default value of the variable is a function that creates a frame using parameters from @code{pop-up-frame-alist}. -@end defvar +@end defopt @defopt pop-up-frame-alist This variable holds an alist specifying frame parameters used when @@ -976,6 +1004,14 @@ For example: @noindent specifies to display a buffer named @samp{myfile} in a dedicated frame with specified @code{minibuffer} and @code{menu-bar-lines} parameters. + +The list of frame parameters can also use the phony frame parameters +@code{same-frame} and @code{same-window}. If the specified frame +parameters include @code{(same-window . @var{value})} and @var{value} +is non-@code{nil}, that means to display the buffer in the current +selected window. Otherwise, if they include @code{(same-frame . +@var{value})} and @var{value} is non-@code{nil}, that means to display +the buffer in a new window in the currently selected frame. @end defopt @defopt special-display-regexps @@ -1059,8 +1095,8 @@ A window can be marked as ``dedicated'' to its buffer. Then other buffer. @defun window-dedicated-p window -This function returns @code{t} if @var{window} is marked as dedicated; -otherwise @code{nil}. +This function returns non-@code{nil} if @var{window} is marked as +dedicated; otherwise @code{nil}. @end defun @defun set-window-dedicated-p window flag @@ -1314,7 +1350,8 @@ If @var{count} is @code{nil} (or omitted), then the length of scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its mode line). -@code{scroll-up} returns @code{nil}. +@code{scroll-up} returns @code{nil}, unless it gets an error +because it can't scroll any further. @end deffn @deffn Command scroll-down &optional count @@ -1326,7 +1363,8 @@ If @var{count} is omitted or @code{nil}, then the length of the scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its mode line). -@code{scroll-down} returns @code{nil}. +@code{scroll-down} returns @code{nil}, unless it gets an error because +it can't scroll any further. @end deffn @deffn Command scroll-other-window &optional count @@ -1560,12 +1598,12 @@ left you can scroll, but eventually all the text will disappear off the left edge. @vindex auto-hscroll-mode - In Emacs 21, redisplay automatically alters the horizontal scrolling -of a window as necessary to ensure that point is always visible, if -@code{auto-hscroll-mode} is set. However, you can still set the -horizontal scrolling value explicitly. The value you specify serves as -a lower bound for automatic scrolling, i.e. automatic scrolling -will not scroll a window to a column less than the specified one. + If @code{auto-hscroll-mode} is set, redisplay automatically alters +the horizontal scrolling of a window as necessary to ensure that point +is always visible. However, you can still set the horizontal +scrolling value explicitly. The value you specify serves as a lower +bound for automatic scrolling, i.e. automatic scrolling will not +scroll a window to a column less than the specified one. @deffn Command scroll-left &optional count This function scrolls the selected window @var{count} columns to the @@ -1618,10 +1656,11 @@ If @var{window} is @code{nil}, the selected window is used. @end defun @defun set-window-hscroll window columns -This function sets the number of columns from the left margin that -@var{window} is scrolled from the value of @var{columns}. The argument -@var{columns} should be zero or positive; if not, it is taken as zero. -Fractional values of @var{columns} are not supported at present. +This function sets horizontal scrolling of @var{window}. The value of +@var{columns} specifies the amount of scrolling, in terms of columns +from the left margin. The argument @var{columns} should be zero or +positive; if not, it is taken as zero. Fractional values of +@var{columns} are not supported at present. Note that @code{set-window-hscroll} may appear not to work if you test it by evaluating a call with @kbd{M-:} in a simple way. What happens @@ -1672,9 +1711,8 @@ characters that separates side-by-side windows. @defun window-height &optional window This function returns the number of lines in @var{window}, including its mode line and header line, if any. If @var{window} fills its -entire frame except for the echo area, and there is no tool bar, this -is typically one less than the value of @code{frame-height} on that -frame. +entire frame except for the echo area, this is typically one less than +the value of @code{frame-height} on that frame. If @var{window} is @code{nil}, the function uses the selected window. @@ -1733,28 +1771,42 @@ its right edge value includes the width of the separator line between the window and that neighbor. Since the width of the window does not include this separator, the width does not usually equal the difference between the right and left edges. +@end defun + +@defun window-inside-edges window +This is similar to @code{window-edges}, but the edge values +it returns include only the text area of the window. They +do not include the header line, mode line, scroll bar or +vertical separator, fringes, or display margins. +@end defun -Here is the result obtained on a typical 24-line terminal with just one -window: +Here are the results obtained on a typical 24-line terminal with just +one window, with menu bar enabled: @example @group (window-edges (selected-window)) - @result{} (0 0 80 23) + @result{} (0 1 80 23) +@end group +@group +(window-inside-edges (selected-window)) + @result{} (0 1 80 22) @end group @end example @noindent The bottom edge is at line 23 because the last line is the echo area. - -If @var{window} is at the upper left corner of its frame, then -@var{bottom} is the same as the value of @code{(window-height)}, -@var{right} is almost the same as the value of @code{(window-width)}, -and @var{top} and @var{left} are zero. For example, the edges of the -following window are @w{@samp{0 0 8 5}}. Assuming that the frame has -more than 8 columns, the last column of the window (column 7) holds a -border rather than text. The last row (row 4) holds the mode line, -shown here with @samp{xxxxxxxxx}. +The bottom inside edge is at line 22, which is the window's mode line. + +If @var{window} is at the upper left corner of its frame, and there is +no menu bar, then @var{bottom} returned by @code{window-edges} is the +same as the value of @code{(window-height)}, @var{right} is almost the +same as the value of @code{(window-width)}, and @var{top} and +@var{left} are zero. For example, the edges of the following window +are @w{@samp{0 0 8 5}}. Assuming that the frame has more than 8 +columns, the last column of the window (column 7) holds a border +rather than text. The last row (row 4) holds the mode line, shown +here with @samp{xxxxxxxxx}. @example @group @@ -1772,7 +1824,9 @@ shown here with @samp{xxxxxxxxx}. In the following example, let's suppose that the frame is 7 columns wide. Then the edges of the left window are @w{@samp{0 0 4 3}} -and the edges of the right window are @w{@samp{4 0 8 3}}. +and the edges of the right window are @w{@samp{4 0 7 3}}. +The inside edges of the left window are @w{@samp{0 0 3 2}}, +and the inside edges of the right window are @w{@samp{4 0 7 2}}, @example @group @@ -1784,6 +1838,17 @@ and the edges of the right window are @w{@samp{4 0 8 3}}. 0 34 7 @end group @end example + +@defun window-pixel-edges window +This function is like @code{window-edges} except that, on a graphical +display, the edge values are measured in pixels instead of in +character lines and columns. +@end defun + +@defun window-inside-pixel-edges window +This function is like @code{window-inside-edges} except that, on a +graphical display, the edge values are measured in pixels instead of +in character lines and columns. @end defun @node Resizing Windows @@ -1972,6 +2037,14 @@ neighbor to the right. This value occurs only if the window doesn't have a scroll bar; positions in a scroll bar are considered outside the window for these purposes. +@item left-fringe +@itemx right-fringe +The coordinates are in the left or right fringe of the window. + +@item left-margin +@itemx right-margin +The coordinates are in the left or right margin of the window. + @item nil The coordinates are not in any part of @var{window}. @end table @@ -1988,7 +2061,8 @@ argument because it always uses the frame that @var{window} is on. A @dfn{window configuration} records the entire layout of one frame---all windows, their sizes, which buffers they contain, what part of each buffer is displayed, and the values of point and the -mark. It also includes the values of @code{window-min-height}, +mark; also their fringes, margins, and scroll bar settings. It also +includes the values of @code{window-min-height}, @code{window-min-width} and @code{minibuffer-scroll-window}. An exception is made for point in the selected window for the current buffer; its value is not saved in the window configuration. @@ -2044,7 +2118,7 @@ that is visible. It also includes the choice of selected window. However, it does not include the value of point in the current buffer; use @code{save-excursion} also, if you wish to preserve that. -Don't use this construct when @code{save-selected-window} is all you need. +Don't use this construct when @code{save-selected-window} is sufficient. Exit from @code{save-window-excursion} always triggers execution of the @code{window-size-change-functions}. (It doesn't know how to tell @@ -2167,3 +2241,7 @@ changing the sizes of windows, or displaying a different buffer in a window. The frame whose window configuration has changed is the selected frame when this hook runs. @end defvar + +@ignore + arch-tag: 3f6c36e8-df49-4986-b757-417feed88be3 +@end ignore