emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/xdisp.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/xdisp.c [emacs-unicode-2]
Date: Fri, 19 Nov 2004 02:16:40 -0500

Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.843.2.32 emacs/src/xdisp.c:1.843.2.33
*** emacs/src/xdisp.c:1.843.2.32        Fri Nov 12 02:52:56 2004
--- emacs/src/xdisp.c   Fri Nov 19 06:54:58 2004
***************
*** 265,270 ****
--- 265,274 ----
  
  int auto_raise_tool_bar_buttons_p;
  
+ /* Non-zero means to reposition window if cursor line is only partially 
visible.  */
+ 
+ int make_cursor_line_fully_visible_p;
+ 
  /* Margin around tool bar buttons in pixels.  */
  
  Lisp_Object Vtool_bar_button_margin;
***************
*** 891,897 ****
  static void reseat P_ ((struct it *, struct text_pos, int));
  static void reseat_1 P_ ((struct it *, struct text_pos, int));
  static void back_to_previous_visible_line_start P_ ((struct it *));
! static void reseat_at_previous_visible_line_start P_ ((struct it *));
  static void reseat_at_next_visible_line_start P_ ((struct it *, int));
  static int next_element_from_display_vector P_ ((struct it *));
  static int next_element_from_string P_ ((struct it *));
--- 895,901 ----
  static void reseat P_ ((struct it *, struct text_pos, int));
  static void reseat_1 P_ ((struct it *, struct text_pos, int));
  static void back_to_previous_visible_line_start P_ ((struct it *));
! void reseat_at_previous_visible_line_start P_ ((struct it *));
  static void reseat_at_next_visible_line_start P_ ((struct it *, int));
  static int next_element_from_display_vector P_ ((struct it *));
  static int next_element_from_string P_ ((struct it *));
***************
*** 1788,1794 ****
  
        /* If drawing a tool-bar window, draw it over the internal border
         at the top of the window.  */
!       if (s->w == XWINDOW (s->f->tool_bar_window))
        r.y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
      }
  
--- 1792,1799 ----
  
        /* If drawing a tool-bar window, draw it over the internal border
         at the top of the window.  */
!       if (WINDOWP (s->f->tool_bar_window)
!         && s->w == XWINDOW (s->f->tool_bar_window))
        r.y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
      }
  
***************
*** 2078,2083 ****
--- 2083,2089 ----
                                  * FRAME_LINE_HEIGHT (it->f));
        else if (it->f->extra_line_spacing > 0)
        it->extra_line_spacing = it->f->extra_line_spacing;
+       it->max_extra_line_spacing = 0;
      }
  
    /* If realized faces have been removed, e.g. because of face
***************
*** 4683,4689 ****
     selective display.  At the end, update IT's overlay information,
     face information etc.  */
  
! static void
  reseat_at_previous_visible_line_start (it)
       struct it *it;
  {
--- 4689,4695 ----
     selective display.  At the end, update IT's overlay information,
     face information etc.  */
  
! void
  reseat_at_previous_visible_line_start (it)
       struct it *it;
  {
***************
*** 4988,4994 ****
          else if ((it->c < ' '
                    ? (it->area != TEXT_AREA
                       /* In mode line, treat \n, \t like other crl chars.  */
!                      || (it->glyph_row && it->glyph_row->mode_line_p)
                       || (it->c != '\n' && it->c != '\t'))
                    : it->multibyte_p ? !CHAR_PRINTABLE_P (it->c)
                    : (it->c >= 127
--- 4994,5001 ----
          else if ((it->c < ' '
                    ? (it->area != TEXT_AREA
                       /* In mode line, treat \n, \t like other crl chars.  */
!                      || (it->c != '\n'
!                          && it->glyph_row && it->glyph_row->mode_line_p)
                       || (it->c != '\n' && it->c != '\t'))
                    : it->multibyte_p ? !CHAR_PRINTABLE_P (it->c)
                    : (it->c >= 127
***************
*** 6177,6186 ****
  {
    int nlines, h;
    struct it it2, it3;
!   int start_pos = IT_CHARPOS (*it);
  
    xassert (dy >= 0);
  
    /* Estimate how many newlines we must move back.  */
    nlines = max (1, dy / FRAME_LINE_HEIGHT (it->f));
  
--- 6184,6196 ----
  {
    int nlines, h;
    struct it it2, it3;
!   int start_pos;
  
+  move_further_back:
    xassert (dy >= 0);
  
+   start_pos = IT_CHARPOS (*it);
+ 
    /* Estimate how many newlines we must move back.  */
    nlines = max (1, dy / FRAME_LINE_HEIGHT (it->f));
  
***************
*** 6246,6258 ****
             a line height of 13 pixels each, recentering with point
             on the bottom line will try to move -39/2 = 19 pixels
             backward.  Try to avoid moving into the first line.  */
!         && it->current_y - target_y > line_height / 3 * 2
          && IT_CHARPOS (*it) > BEGV)
        {
          TRACE_MOVE ((stderr, "  not far enough -> move_vert %d\n",
                       target_y - it->current_y));
!         move_it_vertically (it, target_y - it->current_y);
!         xassert (IT_CHARPOS (*it) >= BEGV);
        }
        else if (target_y >= it->current_y + line_height
               && IT_CHARPOS (*it) < ZV)
--- 6256,6268 ----
             a line height of 13 pixels each, recentering with point
             on the bottom line will try to move -39/2 = 19 pixels
             backward.  Try to avoid moving into the first line.  */
!         && it->current_y - target_y > line_height * 2 / 3
          && IT_CHARPOS (*it) > BEGV)
        {
          TRACE_MOVE ((stderr, "  not far enough -> move_vert %d\n",
                       target_y - it->current_y));
!         dy = it->current_y - target_y;
!         goto move_further_back;
        }
        else if (target_y >= it->current_y + line_height
               && IT_CHARPOS (*it) < ZV)
***************
*** 6293,6299 ****
  {
    if (dy <= 0)
      move_it_vertically_backward (it, -dy);
!   else if (dy > 0)
      {
        TRACE_MOVE ((stderr, "move_it_v: from %d, %d\n", IT_CHARPOS (*it), dy));
        move_it_to (it, ZV, -1, it->current_y + dy, -1,
--- 6303,6309 ----
  {
    if (dy <= 0)
      move_it_vertically_backward (it, -dy);
!   else
      {
        TRACE_MOVE ((stderr, "move_it_v: from %d, %d\n", IT_CHARPOS (*it), dy));
        move_it_to (it, ZV, -1, it->current_y + dy, -1,
***************
*** 6390,6395 ****
--- 6400,6407 ----
        /* DVPOS == 0 means move to the start of the screen line.  */
        move_it_vertically_backward (it, 0);
        xassert (it->current_x == 0 && it->hpos == 0);
+       /* Let next call to line_bottom_y calculate real line height */
+       last_height = 0;
      }
    else if (dvpos > 0)
      move_it_to (it, -1, -1, -1, it->vpos + dvpos, MOVE_TO_VPOS);
***************
*** 6802,6807 ****
--- 6814,6820 ----
    struct gcpro gcpro1;
  
    GCPRO1 (m);
+   clear_message (1,1);
  
    /* First flush out any partial line written with print.  */
    message_log_maybe_newline ();
***************
*** 7534,7540 ****
            height = it.current_y + last_height;
          else
            height = it.current_y + it.max_ascent + it.max_descent;
!         height -= it.extra_line_spacing;
          height = (height + unit - 1) / unit;
        }
  
--- 7547,7553 ----
            height = it.current_y + last_height;
          else
            height = it.current_y + it.max_ascent + it.max_descent;
!         height -= min (it.extra_line_spacing, it.max_extra_line_spacing);
          height = (height + unit - 1) / unit;
        }
  
***************
*** 8813,8818 ****
--- 8826,8832 ----
      {
        row->height = row->phys_height = it->last_visible_y - row->y;
        row->ascent = row->phys_ascent = 0;
+       row->extra_line_spacing = 0;
      }
  
    row->full_width_p = 1;
***************
*** 10981,10986 ****
--- 10995,11003 ----
    struct glyph_row *row;
    int window_height;
  
+   if (!make_cursor_line_fully_visible_p)
+     return 1;
+ 
    /* It's not always possible to find the cursor, e.g, when a window
       is full of overlay strings.  Don't do anything in that case.  */
    if (w->cursor.vpos < 0)
***************
*** 10990,10996 ****
    row = MATRIX_ROW (matrix, w->cursor.vpos);
  
    /* If the cursor row is not partially visible, there's nothing to do.  */
!   if (!MATRIX_ROW_PARTIALLY_VISIBLE_P (row))
      return 1;
  
    /* If the row the cursor is in is taller than the window's height,
--- 11007,11013 ----
    row = MATRIX_ROW (matrix, w->cursor.vpos);
  
    /* If the cursor row is not partially visible, there's nothing to do.  */
!   if (!MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row))
      return 1;
  
    /* If the row the cursor is in is taller than the window's height,
***************
*** 11144,11150 ****
      {
        start_display (&it, w, scroll_margin_pos);
        if (this_scroll_margin)
!       move_it_vertically (&it, - this_scroll_margin);
        if (extra_scroll_margin_lines)
        move_it_by_lines (&it, - extra_scroll_margin_lines, 0);
        scroll_margin_pos = it.current.pos;
--- 11161,11167 ----
      {
        start_display (&it, w, scroll_margin_pos);
        if (this_scroll_margin)
!       move_it_vertically_backward (&it, this_scroll_margin);
        if (extra_scroll_margin_lines)
        move_it_by_lines (&it, - extra_scroll_margin_lines, 0);
        scroll_margin_pos = it.current.pos;
***************
*** 11264,11270 ****
          if (amount_to_scroll <= 0)
            return SCROLLING_FAILED;
  
!         move_it_vertically (&it, - amount_to_scroll);
          startp = it.current.pos;
        }
      }
--- 11281,11287 ----
          if (amount_to_scroll <= 0)
            return SCROLLING_FAILED;
  
!         move_it_vertically_backward (&it, amount_to_scroll);
          startp = it.current.pos;
        }
      }
***************
*** 11568,11574 ****
              /* if PT is not in the glyph row, give up.  */
              rc = CURSOR_MOVEMENT_MUST_SCROLL;
            }
!         else if (MATRIX_ROW_PARTIALLY_VISIBLE_P (row))
            {
              if (PT == MATRIX_ROW_END_CHARPOS (row)
                  && !row->ends_at_zv_p
--- 11585,11592 ----
              /* if PT is not in the glyph row, give up.  */
              rc = CURSOR_MOVEMENT_MUST_SCROLL;
            }
!         else if (MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
!                  && make_cursor_line_fully_visible_p)
            {
              if (PT == MATRIX_ROW_END_CHARPOS (row)
                  && !row->ends_at_zv_p
***************
*** 12143,12149 ****
    if (it.current_y <= 0)
      {
        init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
!       move_it_vertically (&it, 0);
        xassert (IT_CHARPOS (it) <= PT);
        it.current_y = 0;
      }
--- 12161,12167 ----
    if (it.current_y <= 0)
      {
        init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
!       move_it_vertically_backward (&it, 0);
        xassert (IT_CHARPOS (it) <= PT);
        it.current_y = 0;
      }
***************
*** 12492,12498 ****
    /* Give up if old or new display is scrolled vertically.  We could
       make this function handle this, but right now it doesn't.  */
    start_row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
!   if (w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (start_row))
      return 0;
  
    /* The variable new_start now holds the new window start.  The old
--- 12510,12516 ----
    /* Give up if old or new display is scrolled vertically.  We could
       make this function handle this, but right now it doesn't.  */
    start_row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
!   if (w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (w, start_row))
      return 0;
  
    /* The variable new_start now holds the new window start.  The old
***************
*** 12540,12546 ****
              start = start_row->start.pos;
              /* If there are no more rows to try, or just one, give up.  */
              if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1
!                 || w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (start_row)
                  || CHARPOS (start) == ZV)
                {
                  clear_glyph_matrix (w->desired_matrix);
--- 12558,12564 ----
              start = start_row->start.pos;
              /* If there are no more rows to try, or just one, give up.  */
              if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1
!                 || w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (w, start_row)
                  || CHARPOS (start) == ZV)
                {
                  clear_glyph_matrix (w->desired_matrix);
***************
*** 13609,13615 ****
         && CHARPOS (start) > BEGV)
        /* Old redisplay didn't take scroll margin into account at the bottom,
           but then global-hl-line-mode doesn't scroll.  KFS 2004-06-14 */
!       || w->cursor.y + cursor_height + this_scroll_margin > it.last_visible_y)
        {
        w->cursor.vpos = -1;
        clear_glyph_matrix (w->desired_matrix);
--- 13627,13635 ----
         && CHARPOS (start) > BEGV)
        /* Old redisplay didn't take scroll margin into account at the bottom,
           but then global-hl-line-mode doesn't scroll.  KFS 2004-06-14 */
!       || (w->cursor.y + (make_cursor_line_fully_visible_p
!                          ? cursor_height + this_scroll_margin
!                          : 1)) > it.last_visible_y)
        {
        w->cursor.vpos = -1;
        clear_glyph_matrix (w->desired_matrix);
***************
*** 14334,14339 ****
--- 14354,14360 ----
          row->height = it->max_ascent + it->max_descent;
          row->phys_ascent = it->max_phys_ascent;
          row->phys_height = it->max_phys_ascent + it->max_phys_descent;
+         row->extra_line_spacing = it->max_extra_line_spacing;
        }
  
        /* Compute the width of this line.  */
***************
*** 14377,14382 ****
--- 14398,14404 ----
        row->pixel_width -= it->truncation_pixel_width;
        row->ascent = row->phys_ascent = 0;
        row->height = row->phys_height = row->visible_height = 1;
+       row->extra_line_spacing = 0;
      }
  
    /* Compute a hash code for this row.  */
***************
*** 14713,14718 ****
--- 14735,14741 ----
    row->height = it->max_ascent + it->max_descent;
    row->phys_ascent = it->max_phys_ascent;
    row->phys_height = it->max_phys_ascent + it->max_phys_descent;
+   row->extra_line_spacing = it->max_extra_line_spacing;
  
    /* Loop generating characters.  The loop is left with IT on the next
       character to display.  */
***************
*** 14778,14783 ****
--- 14801,14808 ----
          row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent);
          row->phys_height = max (row->phys_height,
                                  it->max_phys_ascent + it->max_phys_descent);
+         row->extra_line_spacing = max (row->extra_line_spacing,
+                                        it->max_extra_line_spacing);
          set_iterator_to_next (it, 1);
          continue;
        }
***************
*** 14806,14811 ****
--- 14831,14838 ----
          row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent);
          row->phys_height = max (row->phys_height,
                                  it->max_phys_ascent + it->max_phys_descent);
+         row->extra_line_spacing = max (row->extra_line_spacing,
+                                        it->max_extra_line_spacing);
          if (it->current_x - it->pixel_width < it->first_visible_x)
            row->x = x - it->first_visible_x;
        }
***************
*** 14957,14962 ****
--- 14984,14991 ----
          row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent);
          row->phys_height = max (row->phys_height,
                                  it->max_phys_ascent + it->max_phys_descent);
+         row->extra_line_spacing = max (row->extra_line_spacing,
+                                        it->max_extra_line_spacing);
  
          /* End of this display line if row is continued.  */
          if (row->continued_p || row->ends_at_zv_p)
***************
*** 15584,15590 ****
                  {
                    int bytepos = last - lisp_string;
                    int charpos = string_byte_to_char (elt, bytepos);
!                   int endpos = (precision <= 0 ? SCHARS (elt)
                                  : charpos + nchars);
  
                    n += store_mode_line_string (NULL,
--- 15613,15621 ----
                  {
                    int bytepos = last - lisp_string;
                    int charpos = string_byte_to_char (elt, bytepos);
!                   int endpos = (precision <= 0
!                                 ? string_byte_to_char (elt,
!                                                        this - lisp_string)
                                  : charpos + nchars);
  
                    n += store_mode_line_string (NULL,
***************
*** 15892,15898 ****
        props = mode_line_string_face_prop;
        else if (!NILP (mode_line_string_face))
        {
!         Lisp_Object face = Fplist_get (props, Qface);
          props = Fcopy_sequence (props);
          if (NILP (face))
            face = mode_line_string_face;
--- 15923,15929 ----
        props = mode_line_string_face_prop;
        else if (!NILP (mode_line_string_face))
        {
!         Lisp_Object face = Fsafe_plist_get (props, Qface);
          props = Fcopy_sequence (props);
          if (NILP (face))
            face = mode_line_string_face;
***************
*** 15917,15923 ****
          Lisp_Object face;
          if (NILP (props))
            props = Ftext_properties_at (make_number (0), lisp_string);
!         face = Fplist_get (props, Qface);
          if (NILP (face))
            face = mode_line_string_face;
          else
--- 15948,15954 ----
          Lisp_Object face;
          if (NILP (props))
            props = Ftext_properties_at (make_number (0), lisp_string);
!         face = Fsafe_plist_get (props, Qface);
          if (NILP (face))
            face = mode_line_string_face;
          else
***************
*** 16871,16876 ****
--- 16902,16908 ----
    row->height = it->max_ascent + it->max_descent;
    row->phys_ascent = it->max_phys_ascent;
    row->phys_height = it->max_phys_ascent + it->max_phys_descent;
+   row->extra_line_spacing = it->max_extra_line_spacing;
  
    /* This condition is for the case that we are called with current_x
       past last_visible_x.  */
***************
*** 16930,16935 ****
--- 16962,16969 ----
          row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent);
          row->phys_height = max (row->phys_height,
                                  it->max_phys_ascent + it->max_phys_descent);
+         row->extra_line_spacing = max (row->extra_line_spacing,
+                                        it->max_extra_line_spacing);
          x += glyph->pixel_width;
          ++i;
        }
***************
*** 17366,17372 ****
    s->y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
  
    /* Display the internal border below the tool-bar window.  */
!   if (s->w == XWINDOW (s->f->tool_bar_window))
      s->y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
  
    s->ybase = s->y + row->ascent;
--- 17400,17407 ----
    s->y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
  
    /* Display the internal border below the tool-bar window.  */
!   if (WINDOWP (s->f->tool_bar_window)
!       && s->w == XWINDOW (s->f->tool_bar_window))
      s->y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
  
    s->ybase = s->y + row->ascent;
***************
*** 18701,18714 ****
    plist = XCDR (it->object);
  
    /* Compute the width of the stretch.  */
!   if ((prop = Fplist_get (plist, QCwidth), !NILP (prop))
        && calc_pixel_width_or_height (&tem, it, prop, font, 1, 0))
      {
        /* Absolute width `:width WIDTH' specified and valid.  */
        zero_width_ok_p = 1;
        width = (int)tem;
      }
!   else if (prop = Fplist_get (plist, QCrelative_width),
           NUMVAL (prop) > 0)
      {
        /* Relative width `:relative-width FACTOR' specified and valid.
--- 18736,18749 ----
    plist = XCDR (it->object);
  
    /* Compute the width of the stretch.  */
!   if ((prop = Fsafe_plist_get (plist, QCwidth), !NILP (prop))
        && calc_pixel_width_or_height (&tem, it, prop, font, 1, 0))
      {
        /* Absolute width `:width WIDTH' specified and valid.  */
        zero_width_ok_p = 1;
        width = (int)tem;
      }
!   else if (prop = Fsafe_plist_get (plist, QCrelative_width),
           NUMVAL (prop) > 0)
      {
        /* Relative width `:relative-width FACTOR' specified and valid.
***************
*** 18732,18738 ****
        x_produce_glyphs (&it2);
        width = NUMVAL (prop) * it2.pixel_width;
      }
!   else if ((prop = Fplist_get (plist, QCalign_to), !NILP (prop))
           && calc_pixel_width_or_height (&tem, it, prop, font, 1, &align_to))
      {
        if (it->glyph_row == NULL || !it->glyph_row->mode_line_p)
--- 18767,18773 ----
        x_produce_glyphs (&it2);
        width = NUMVAL (prop) * it2.pixel_width;
      }
!   else if ((prop = Fsafe_plist_get (plist, QCalign_to), !NILP (prop))
           && calc_pixel_width_or_height (&tem, it, prop, font, 1, &align_to))
      {
        if (it->glyph_row == NULL || !it->glyph_row->mode_line_p)
***************
*** 18752,18764 ****
      width = 1;
  
    /* Compute height.  */
!   if ((prop = Fplist_get (plist, QCheight), !NILP (prop))
        && calc_pixel_width_or_height (&tem, it, prop, font, 0, 0))
      {
        height = (int)tem;
        zero_height_ok_p = 1;
      }
!   else if (prop = Fplist_get (plist, QCrelative_height),
           NUMVAL (prop) > 0)
      height = FONT_HEIGHT (font) * NUMVAL (prop);
    else
--- 18787,18799 ----
      width = 1;
  
    /* Compute height.  */
!   if ((prop = Fsafe_plist_get (plist, QCheight), !NILP (prop))
        && calc_pixel_width_or_height (&tem, it, prop, font, 0, 0))
      {
        height = (int)tem;
        zero_height_ok_p = 1;
      }
!   else if (prop = Fsafe_plist_get (plist, QCrelative_height),
           NUMVAL (prop) > 0)
      height = FONT_HEIGHT (font) * NUMVAL (prop);
    else
***************
*** 18770,18776 ****
    /* Compute percentage of height used for ascent.  If
       `:ascent ASCENT' is present and valid, use that.  Otherwise,
       derive the ascent from the font in use.  */
!   if (prop = Fplist_get (plist, QCascent),
        NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
      ascent = height * NUMVAL (prop) / 100.0;
    else if (!NILP (prop)
--- 18805,18811 ----
    /* Compute percentage of height used for ascent.  If
       `:ascent ASCENT' is present and valid, use that.  Otherwise,
       derive the ascent from the font in use.  */
!   if (prop = Fsafe_plist_get (plist, QCascent),
        NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
      ascent = height * NUMVAL (prop) / 100.0;
    else if (!NILP (prop)
***************
*** 19594,19600 ****
      it->current_x += it->pixel_width;
  
    if (extra_line_spacing > 0)
!     it->descent += extra_line_spacing;
  
    it->max_ascent = max (it->max_ascent, it->ascent);
    it->max_descent = max (it->max_descent, it->descent);
--- 19629,19639 ----
      it->current_x += it->pixel_width;
  
    if (extra_line_spacing > 0)
!     {
!       it->descent += extra_line_spacing;
!       if (extra_line_spacing > it->max_extra_line_spacing)
!       it->max_extra_line_spacing = extra_line_spacing;
!     }
  
    it->max_ascent = max (it->max_ascent, it->ascent);
    it->max_descent = max (it->max_descent, it->descent);
***************
*** 20177,20182 ****
--- 20216,20226 ----
    if (!cursor_row->enabled_p)
      goto mark_cursor_off;
  
+   /* If line spacing is > 0, old cursor may only be partially visible in
+      window after split-window.  So adjust visible height.  */
+   cursor_row->visible_height = min (cursor_row->visible_height,
+                                   window_text_bottom_y (w) - cursor_row->y);
+ 
    /* If row is completely invisible, don't attempt to delete a cursor which
       isn't there.  This can happen if cursor is at top of a window, and
       we switch to a buffer with a header line in that window.  */
***************
*** 21010,21016 ****
    if (IMAGEP (object))
      {
        Lisp_Object image_map, hotspot;
!       if ((image_map = Fplist_get (XCDR (object), QCmap),
           !NILP (image_map))
          && (hotspot = find_hot_spot (image_map, dx, dy),
              CONSP (hotspot))
--- 21054,21060 ----
    if (IMAGEP (object))
      {
        Lisp_Object image_map, hotspot;
!       if ((image_map = Fsafe_plist_get (XCDR (object), QCmap),
           !NILP (image_map))
          && (hotspot = find_hot_spot (image_map, dx, dy),
              CONSP (hotspot))
***************
*** 21022,21033 ****
          /* Could check AREA_ID to see if we enter/leave this hot-spot.
             If so, we could look for mouse-enter, mouse-leave
             properties in PLIST (and do something...).  */
!         if ((plist = XCDR (hotspot), CONSP (plist)))
            {
!             pointer = Fplist_get (plist, Qpointer);
              if (NILP (pointer))
                pointer = Qhand;
!             help = Fplist_get (plist, Qhelp_echo);
              if (!NILP (help))
                {
                  help_echo_string = help;
--- 21066,21079 ----
          /* Could check AREA_ID to see if we enter/leave this hot-spot.
             If so, we could look for mouse-enter, mouse-leave
             properties in PLIST (and do something...).  */
!         hotspot = XCDR (hotspot);
!         if (CONSP (hotspot)
!             && (plist = XCAR (hotspot), CONSP (plist)))
            {
!             pointer = Fsafe_plist_get (plist, Qpointer);
              if (NILP (pointer))
                pointer = Qhand;
!             help = Fsafe_plist_get (plist, Qhelp_echo);
              if (!NILP (help))
                {
                  help_echo_string = help;
***************
*** 21038,21044 ****
                }
            }
          if (NILP (pointer))
!           pointer = Fplist_get (XCDR (object), QCpointer);
        }
      }
  
--- 21084,21090 ----
                }
            }
          if (NILP (pointer))
!           pointer = Fsafe_plist_get (XCDR (object), QCpointer);
        }
      }
  
***************
*** 21189,21195 ****
          if (img != NULL && IMAGEP (img->spec))
            {
              Lisp_Object image_map, hotspot;
!             if ((image_map = Fplist_get (XCDR (img->spec), QCmap),
                   !NILP (image_map))
                  && (hotspot = find_hot_spot (image_map,
                                               glyph->slice.x + dx,
--- 21235,21241 ----
          if (img != NULL && IMAGEP (img->spec))
            {
              Lisp_Object image_map, hotspot;
!             if ((image_map = Fsafe_plist_get (XCDR (img->spec), QCmap),
                   !NILP (image_map))
                  && (hotspot = find_hot_spot (image_map,
                                               glyph->slice.x + dx,
***************
*** 21203,21214 ****
                  /* Could check AREA_ID to see if we enter/leave this hot-spot.
                     If so, we could look for mouse-enter, mouse-leave
                     properties in PLIST (and do something...).  */
!                 if ((plist = XCDR (hotspot), CONSP (plist)))
                    {
!                     pointer = Fplist_get (plist, Qpointer);
                      if (NILP (pointer))
                        pointer = Qhand;
!                     help_echo_string = Fplist_get (plist, Qhelp_echo);
                      if (!NILP (help_echo_string))
                        {
                          help_echo_window = window;
--- 21249,21262 ----
                  /* Could check AREA_ID to see if we enter/leave this hot-spot.
                     If so, we could look for mouse-enter, mouse-leave
                     properties in PLIST (and do something...).  */
!                 hotspot = XCDR (hotspot);
!                 if (CONSP (hotspot)
!                     && (plist = XCAR (hotspot), CONSP (plist)))
                    {
!                     pointer = Fsafe_plist_get (plist, Qpointer);
                      if (NILP (pointer))
                        pointer = Qhand;
!                     help_echo_string = Fsafe_plist_get (plist, Qhelp_echo);
                      if (!NILP (help_echo_string))
                        {
                          help_echo_window = window;
***************
*** 21218,21224 ****
                    }
                }
              if (NILP (pointer))
!               pointer = Fplist_get (XCDR (img->spec), QCpointer);
            }
        }
  
--- 21266,21272 ----
                    }
                }
              if (NILP (pointer))
!               pointer = Fsafe_plist_get (XCDR (img->spec), QCpointer);
            }
        }
  
***************
*** 22515,22520 ****
--- 22563,22572 ----
      doc: /* *Non-nil means raise tool-bar buttons when the mouse moves over 
them.  */);
    auto_raise_tool_bar_buttons_p = 1;
  
+   DEFVAR_BOOL ("make-cursor-line-fully-visible", 
&make_cursor_line_fully_visible_p,
+     doc: /* *Non-nil means to scroll (recenter) cursor line if it is not 
fully visible.  */);
+   make_cursor_line_fully_visible_p = 1;
+ 
    DEFVAR_LISP ("tool-bar-button-margin", &Vtool_bar_button_margin,
      doc: /* *Margin around tool-bar buttons in pixels.
  If an integer, use that for both horizontal and vertical margins.




reply via email to

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