emacs-diffs
[Top][All Lists]
Advanced

[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;
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]