[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/window.c [emacs-unicode-2]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/window.c [emacs-unicode-2] |
Date: |
Mon, 28 Jun 2004 03:55:07 -0400 |
Index: emacs/src/window.c
diff -c emacs/src/window.c:1.445.2.2 emacs/src/window.c:1.445.2.3
*** emacs/src/window.c:1.445.2.2 Fri Apr 16 12:50:51 2004
--- emacs/src/window.c Mon Jun 28 07:29:24 2004
***************
*** 1,6 ****
/* Window creation, deletion and examination for GNU Emacs.
Does not include redisplay.
! Copyright (C) 1985,86,87,93,94,95,96,97,1998,2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of GNU Emacs.
--- 1,6 ----
/* Window creation, deletion and examination for GNU Emacs.
Does not include redisplay.
! Copyright (C) 1985,86,87, 1993,94,95,96,97,98, 2000,01,02,03,04
Free Software Foundation, Inc.
This file is part of GNU Emacs.
***************
*** 322,328 ****
Return nil if that position is scrolled vertically out of view.
If a character is only partially visible, nil is returned, unless the
optional argument PARTIALLY is non-nil.
! POS defaults to point in WINDOW; WINDOW defaults to the selected window. */)
(pos, window, partially)
Lisp_Object pos, window, partially;
{
--- 322,332 ----
Return nil if that position is scrolled vertically out of view.
If a character is only partially visible, nil is returned, unless the
optional argument PARTIALLY is non-nil.
! POS defaults to point in WINDOW; WINDOW defaults to the selected window.
!
! If POS is visible, return t if PARTIALLY is nil; if PARTIALLY is non-nil,
! return value is a list (X Y PARTIAL) where X and Y are the pixel relative
! coordinate */)
(pos, window, partially)
Lisp_Object pos, window, partially;
{
***************
*** 330,337 ****
register int posint;
register struct buffer *buf;
struct text_pos top;
! Lisp_Object in_window;
! int fully_p;
w = decode_window (window);
buf = XBUFFER (w->buffer);
--- 334,342 ----
register int posint;
register struct buffer *buf;
struct text_pos top;
! Lisp_Object in_window = Qnil;
! int fully_p = 1;
! int x, y;
w = decode_window (window);
buf = XBUFFER (w->buffer);
***************
*** 347,384 ****
else
posint = XMARKER (w->pointm)->charpos;
! /* If position is above window start, it's not visible. */
! if (posint < CHARPOS (top))
! in_window = Qnil;
! else if (XFASTINT (w->last_modified) >= BUF_MODIFF (buf)
! && XFASTINT (w->last_overlay_modified) >= BUF_OVERLAY_MODIFF (buf)
! && posint < BUF_Z (buf) - XFASTINT (w->window_end_pos))
! {
! /* If frame is up-to-date, and POSINT is < window end pos, use
! that info. This doesn't work for POSINT == end pos, because
! the window end pos is actually the position _after_ the last
! char in the window. */
! if (NILP (partially))
! {
! pos_visible_p (w, posint, &fully_p, NILP (partially));
! in_window = fully_p ? Qt : Qnil;
! }
! else
! in_window = Qt;
! }
! else if (posint > BUF_ZV (buf))
! in_window = Qnil;
! else if (CHARPOS (top) < BUF_BEGV (buf) || CHARPOS (top) > BUF_ZV (buf))
! /* If window start is out of range, do something reasonable. */
! in_window = Qnil;
! else
! {
! if (pos_visible_p (w, posint, &fully_p, NILP (partially)))
! in_window = !NILP (partially) || fully_p ? Qt : Qnil;
! else
! in_window = Qnil;
! }
!
return in_window;
}
--- 352,371 ----
else
posint = XMARKER (w->pointm)->charpos;
! /* If position is above window start or outside buffer boundaries,
! or if window start is out of range, position is not visible. */
! if (posint >= CHARPOS (top)
! && posint <= BUF_ZV (buf)
! && CHARPOS (top) >= BUF_BEGV (buf)
! && CHARPOS (top) <= BUF_ZV (buf)
! && pos_visible_p (w, posint, &fully_p, &x, &y, NILP (partially))
! && (!NILP (partially) || fully_p))
! in_window = Qt;
!
! if (!NILP (in_window) && !NILP (partially))
! in_window = Fcons (make_number (x),
! Fcons (make_number (y),
! Fcons (fully_p ? Qt : Qnil, Qnil)));
return in_window;
}
***************
*** 3036,3042 ****
DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 3, 0,
doc: /* Make WINDOW display BUFFER as its contents.
BUFFER can be a buffer or buffer name.
! Optional third arg KEEP_MARGINS non-nil means that WINDOW's current
display margins, fringe widths, and scroll bar settings are maintained;
the default is to reset these from BUFFER's local settings or the frame
defaults. */)
--- 3023,3029 ----
DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 3, 0,
doc: /* Make WINDOW display BUFFER as its contents.
BUFFER can be a buffer or buffer name.
! Optional third arg KEEP-MARGINS non-nil means that WINDOW's current
display margins, fringe widths, and scroll bar settings are maintained;
the default is to reset these from BUFFER's local settings or the frame
defaults. */)
***************
*** 3075,3082 ****
DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0,
doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer.
! If WINDOW is not already selected, also make WINDOW's buffer current.
! Also make WINDOW the frame's selected window.
Optional second arg NORECORD non-nil means
do not put this buffer at the front of the list of recently selected ones.
--- 3062,3069 ----
DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0,
doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer.
! If WINDOW is not already selected, make WINDOW's buffer current
! and make WINDOW the frame's selected window.
Optional second arg NORECORD non-nil means
do not put this buffer at the front of the list of recently selected ones.
***************
*** 3283,3288 ****
--- 3270,3279 ----
unless `pop-up-frames' or `display-buffer-reuse-frames' is non-nil,
which means search visible and iconified frames.
+ If a full-width window on a splittable frame is available to display
+ the buffer, it may be split, subject to the value of the variable
+ `split-height-threshold'.
+
If `even-window-heights' is non-nil, window heights will be evened out
if displaying the buffer causes two vertically adjacent windows to be
displayed. */)
***************
*** 3460,3466 ****
0, 1, 0,
doc: /* Force redisplay of all windows.
If optional arg OBJECT is a window, force redisplay of that window only.
! If OBJECT is a buffer or buffer name, force redisplay of all windows
displaying that buffer. */)
(object)
Lisp_Object object;
--- 3451,3457 ----
0, 1, 0,
doc: /* Force redisplay of all windows.
If optional arg OBJECT is a window, force redisplay of that window only.
! If OBJECT is a buffer or buffer name, force redisplay of all windows
displaying that buffer. */)
(object)
Lisp_Object object;
***************
*** 3482,3488 ****
++update_mode_lines;
return Qt;
}
!
if (STRINGP (object))
object = Fget_buffer (object);
if (BUFFERP (object) && !NILP (XBUFFER (object)->name))
--- 3473,3479 ----
++update_mode_lines;
return Qt;
}
!
if (STRINGP (object))
object = Fget_buffer (object);
if (BUFFERP (object) && !NILP (XBUFFER (object)->name))
***************
*** 3547,3553 ****
Lisp_Object prev_window, prev_buffer;
prev_window = selected_window;
XSETBUFFER (prev_buffer, old);
!
/* Select the window that was chosen, for running the hook.
Note: Both Fselect_window and select_window_norecord may
set-buffer to the buffer displayed in the window,
--- 3538,3544 ----
Lisp_Object prev_window, prev_buffer;
prev_window = selected_window;
XSETBUFFER (prev_buffer, old);
!
/* Select the window that was chosen, for running the hook.
Note: Both Fselect_window and select_window_norecord may
set-buffer to the buffer displayed in the window,
***************
*** 3598,3604 ****
WINDOW defaults to selected one and SIZE to half its size.
If optional third arg HORFLAG is non-nil, split side by side
and put SIZE columns in the first of the pair. In that case,
! SIZE includes that window's scroll bar, or the divider column to its right.
*/)
(window, size, horflag)
Lisp_Object window, size, horflag;
{
--- 3589,3596 ----
WINDOW defaults to selected one and SIZE to half its size.
If optional third arg HORFLAG is non-nil, split side by side
and put SIZE columns in the first of the pair. In that case,
! SIZE includes that window's scroll bar, or the divider column to its right.
! Returns the newly-created window. */)
(window, size, horflag)
Lisp_Object window, size, horflag;
{
***************
*** 6067,6073 ****
vertical_type = Qnil;
if (!(EQ (vertical_type, Qnil)
! || EQ (vertical_type, Qleft)
|| EQ (vertical_type, Qright)
|| EQ (vertical_type, Qt)))
error ("Invalid type of vertical scroll bar");
--- 6059,6065 ----
vertical_type = Qnil;
if (!(EQ (vertical_type, Qnil)
! || EQ (vertical_type, Qleft)
|| EQ (vertical_type, Qright)
|| EQ (vertical_type, Qt)))
error ("Invalid type of vertical scroll bar");
***************
*** 6116,6127 ****
Smooth scrolling
***********************************************************************/
! DEFUN ("window-vscroll", Fwindow_vscroll, Swindow_vscroll, 0, 1, 0,
doc: /* Return the amount by which WINDOW is scrolled vertically.
Use the selected window if WINDOW is nil or omitted.
! Value is a multiple of the canonical character height of WINDOW. */)
! (window)
! Lisp_Object window;
{
Lisp_Object result;
struct frame *f;
--- 6108,6120 ----
Smooth scrolling
***********************************************************************/
! DEFUN ("window-vscroll", Fwindow_vscroll, Swindow_vscroll, 0, 2, 0,
doc: /* Return the amount by which WINDOW is scrolled vertically.
Use the selected window if WINDOW is nil or omitted.
! Normally, value is a multiple of the canonical character height of WINDOW;
! optional second arg PIXELS_P means value is measured in pixels. */)
! (window, pixels_p)
! Lisp_Object window, pixels_p;
{
Lisp_Object result;
struct frame *f;
***************
*** 6135,6141 ****
f = XFRAME (w->frame);
if (FRAME_WINDOW_P (f))
! result = FRAME_CANON_Y_FROM_PIXEL_Y (f, -w->vscroll);
else
result = make_number (0);
return result;
--- 6128,6136 ----
f = XFRAME (w->frame);
if (FRAME_WINDOW_P (f))
! result = (NILP (pixels_p)
! ? FRAME_CANON_Y_FROM_PIXEL_Y (f, -w->vscroll)
! : make_number (-w->vscroll));
else
result = make_number (0);
return result;
***************
*** 6143,6154 ****
DEFUN ("set-window-vscroll", Fset_window_vscroll, Sset_window_vscroll,
! 2, 2, 0,
doc: /* Set amount by which WINDOW should be scrolled vertically to
VSCROLL.
! WINDOW nil means use the selected window. VSCROLL is a non-negative
! multiple of the canonical character height of WINDOW. */)
! (window, vscroll)
! Lisp_Object window, vscroll;
{
struct window *w;
struct frame *f;
--- 6138,6150 ----
DEFUN ("set-window-vscroll", Fset_window_vscroll, Sset_window_vscroll,
! 2, 3, 0,
doc: /* Set amount by which WINDOW should be scrolled vertically to
VSCROLL.
! WINDOW nil means use the selected window. Normally, VSCROLL is a
! non-negative multiple of the canonical character height of WINDOW;
! optional third arg PIXELS_P non-nil means that VSCROLL is in pixels. */)
! (window, vscroll, pixels_p)
! Lisp_Object window, vscroll, pixels_p;
{
struct window *w;
struct frame *f;
***************
*** 6166,6172 ****
{
int old_dy = w->vscroll;
! w->vscroll = - FRAME_LINE_HEIGHT (f) * XFLOATINT (vscroll);
w->vscroll = min (w->vscroll, 0);
/* Adjust glyph matrix of the frame if the virtual display
--- 6162,6170 ----
{
int old_dy = w->vscroll;
! w->vscroll = - (NILP (pixels_p)
! ? FRAME_LINE_HEIGHT (f) * XFLOATINT (vscroll)
! : XFLOATINT (vscroll));
w->vscroll = min (w->vscroll, 0);
/* Adjust glyph matrix of the frame if the virtual display
***************
*** 6178,6184 ****
XBUFFER (w->buffer)->prevent_redisplay_optimizations_p = 1;
}
! return Fwindow_vscroll (window);
}
--- 6176,6182 ----
XBUFFER (w->buffer)->prevent_redisplay_optimizations_p = 1;
}
! return Fwindow_vscroll (window, pixels_p);
}
***************
*** 6506,6514 ****
An element of the list can be a list instead of just a string.
There are two ways to use a list as an element:
(BUFFER FRAME-PARAMETERS...) (BUFFER FUNCTION OTHER-ARGS...)
! In the first case, FRAME-PARAMETERS are used to create the frame.
! In the latter case, FUNCTION is called with BUFFER as the first argument,
! followed by OTHER-ARGS--it can display BUFFER in any way it likes.
All this is done by the function found in `special-display-function'.
If the specified frame parameters include (same-buffer . t), the
--- 6504,6513 ----
An element of the list can be a list instead of just a string.
There are two ways to use a list as an element:
(BUFFER FRAME-PARAMETERS...) (BUFFER FUNCTION OTHER-ARGS...)
! In the first case, the FRAME-PARAMETERS are pairs of the form
! \(PARAMETER . VALUE); these parameter values are used to create the frame.
! In the second case, FUNCTION is called with BUFFER as the first argument,
! followed by the OTHER-ARGS--it can display BUFFER in any way it likes.
All this is done by the function found in `special-display-function'.
If the specified frame parameters include (same-buffer . t), the
***************
*** 6531,6539 ****
An element of the list can be a list instead of just a string.
There are two ways to use a list as an element:
(REGEXP FRAME-PARAMETERS...) (REGEXP FUNCTION OTHER-ARGS...)
! In the first case, FRAME-PARAMETERS are used to create the frame.
! In the latter case, FUNCTION is called with the buffer as first argument,
! followed by OTHER-ARGS--it can display the buffer in any way it likes.
All this is done by the function found in `special-display-function'.
If the specified frame parameters include (same-buffer . t), the
--- 6530,6539 ----
An element of the list can be a list instead of just a string.
There are two ways to use a list as an element:
(REGEXP FRAME-PARAMETERS...) (REGEXP FUNCTION OTHER-ARGS...)
! In the first case, the FRAME-PARAMETERS are pairs of the form
! \(PARAMETER . VALUE); these parameter values are used to create the frame.
! In the second case, FUNCTION is called with BUFFER as the first argument,
! followed by the OTHER-ARGS--it can display the buffer in any way it likes.
All this is done by the function found in `special-display-function'.
If the specified frame parameters include (same-buffer . t), the
***************
*** 6599,6605 ****
next_screen_context_lines = 2;
DEFVAR_INT ("split-height-threshold", &split_height_threshold,
! doc: /* *display-buffer would prefer to split the largest window
if this large.
If there is only one window, it is split regardless of this value. */);
split_height_threshold = 500;
--- 6599,6605 ----
next_screen_context_lines = 2;
DEFVAR_INT ("split-height-threshold", &split_height_threshold,
! doc: /* *A window must be at least this tall to be eligible for
splitting by `display-buffer'.
If there is only one window, it is split regardless of this value. */);
split_height_threshold = 500;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/src/window.c [emacs-unicode-2],
Miles Bader <=