/[emacs]/emacs/src/xdisp.c
ViewVC logotype

Diff of /emacs/src/xdisp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.754.2.39 by miles, Wed Dec 8 23:31:37 2004 UTC revision 1.754.2.40 by miles, Wed Dec 8 23:36:22 2004 UTC
# Line 342  Lisp_Object Vvoid_text_area_pointer; Line 342  Lisp_Object Vvoid_text_area_pointer;
342    
343  Lisp_Object Qtrailing_whitespace;  Lisp_Object Qtrailing_whitespace;
344    
345    /* Name and number of the face used to highlight escape glyphs.  */
346    
347    Lisp_Object Qescape_glyph;
348    int escape_glyph_face;
349    
350  /* The symbol `image' which is the car of the lists used to represent  /* The symbol `image' which is the car of the lists used to represent
351     images in Lisp.  */     images in Lisp.  */
352    
# Line 807  static struct glyph_slice null_glyph_sli Line 812  static struct glyph_slice null_glyph_sli
812    
813  /* Function prototypes.  */  /* Function prototypes.  */
814    
815  static void setup_for_ellipsis P_ ((struct it *));  static void setup_for_ellipsis P_ ((struct it *, int));
816  static void mark_window_display_accurate_1 P_ ((struct window *, int));  static void mark_window_display_accurate_1 P_ ((struct window *, int));
817  static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));  static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
818  static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));  static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
# Line 3227  handle_invisible_prop (it) Line 3232  handle_invisible_prop (it)
3232                it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;                it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
3233              }              }
3234            else if (display_ellipsis_p)            else if (display_ellipsis_p)
3235              setup_for_ellipsis (it);              setup_for_ellipsis (it, 0);
3236          }          }
3237      }      }
3238    
# Line 3235  handle_invisible_prop (it) Line 3240  handle_invisible_prop (it)
3240  }  }
3241    
3242    
3243  /* Make iterator IT return `...' next.  */  /* Make iterator IT return `...' next.
3244       Replaces LEN characters from buffer.  */
3245    
3246  static void  static void
3247  setup_for_ellipsis (it)  setup_for_ellipsis (it, len)
3248       struct it *it;       struct it *it;
3249         int len;
3250  {  {
3251    if (it->dp    /* Use the display table definition for `...'.  Invalid glyphs
3252        && VECTORP (DISP_INVIS_VECTOR (it->dp)))       will be handled by the method returning elements from dpvec.  */
3253      if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
3254      {      {
3255        struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));        struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
3256        it->dpvec = v->contents;        it->dpvec = v->contents;
# Line 3255  setup_for_ellipsis (it) Line 3263  setup_for_ellipsis (it)
3263        it->dpend = default_invis_vector + 3;        it->dpend = default_invis_vector + 3;
3264      }      }
3265    
3266    /* The ellipsis display does not replace the display of the    it->dpvec_char_len = len;
      character at the new position.  Indicate this by setting  
      IT->dpvec_char_len to zero.  */  
   it->dpvec_char_len = 0;  
   
3267    it->current.dpvec_index = 0;    it->current.dpvec_index = 0;
3268    
3269      /* Remember the current face id in case glyphs specify faces.
3270         IT's face is restored in set_iterator_to_next.  */
3271      it->saved_face_id = it->face_id;
3272    it->method = next_element_from_display_vector;    it->method = next_element_from_display_vector;
3273  }  }
3274    
# Line 3575  handle_single_display_prop (it, prop, ob Line 3583  handle_single_display_prop (it, prop, ob
3583                || EQ (XCAR (prop), Qright_fringe))                || EQ (XCAR (prop), Qright_fringe))
3584            && CONSP (XCDR (prop)))            && CONSP (XCDR (prop)))
3585          {          {
3586            unsigned face_id = DEFAULT_FACE_ID;            int face_id = DEFAULT_FACE_ID;
3587            int fringe_bitmap;            int fringe_bitmap;
3588    
3589            /* Save current settings of IT so that we can restore them            /* Save current settings of IT so that we can restore them
# Line 3594  handle_single_display_prop (it, prop, ob Line 3602  handle_single_display_prop (it, prop, ob
3602            if (CONSP (XCDR (XCDR (prop))))            if (CONSP (XCDR (XCDR (prop))))
3603              {              {
3604                Lisp_Object face_name = XCAR (XCDR (XCDR (prop)));                Lisp_Object face_name = XCAR (XCDR (XCDR (prop)));
3605                  int face_id2 = lookup_named_face (it->f, face_name, 'A', 0);
3606                face_id = lookup_named_face (it->f, face_name, 'A');                if (face_id2 >= 0)
3607                if (face_id < 0)                  face_id = face_id2;
                 return 0;  
3608              }              }
3609    
3610            push_it (it);            push_it (it);
# Line 4049  next_overlay_string (it) Line 4056  next_overlay_string (it)
4056        /* If we have to display `...' for invisible text, set        /* If we have to display `...' for invisible text, set
4057           the iterator up for that.  */           the iterator up for that.  */
4058        if (display_ellipsis_p)        if (display_ellipsis_p)
4059          setup_for_ellipsis (it);          setup_for_ellipsis (it, 0);
4060      }      }
4061    else    else
4062      {      {
# Line 4841  get_next_display_element (it) Line 4848  get_next_display_element (it)
4848       we hit the end of what we iterate over.  Performance note: the       we hit the end of what we iterate over.  Performance note: the
4849       function pointer `method' used here turns out to be faster than       function pointer `method' used here turns out to be faster than
4850       using a sequence of if-statements.  */       using a sequence of if-statements.  */
4851    int success_p = (*it->method) (it);    int success_p;
4852    
4853     get_next:
4854      success_p = (*it->method) (it);
4855    
4856    if (it->what == IT_CHARACTER)    if (it->what == IT_CHARACTER)
4857      {      {
# Line 4873  get_next_display_element (it) Line 4883  get_next_display_element (it)
4883                    it->dpvec = v->contents;                    it->dpvec = v->contents;
4884                    it->dpend = v->contents + v->size;                    it->dpend = v->contents + v->size;
4885                    it->current.dpvec_index = 0;                    it->current.dpvec_index = 0;
4886                      it->saved_face_id = it->face_id;
4887                    it->method = next_element_from_display_vector;                    it->method = next_element_from_display_vector;
                   success_p = get_next_display_element (it);  
4888                  }                  }
4889                else                else
4890                  {                  {
4891                    set_iterator_to_next (it, 0);                    set_iterator_to_next (it, 0);
                   success_p = get_next_display_element (it);  
4892                  }                  }
4893                  goto get_next;
4894              }              }
4895    
4896            /* Translate control characters into `\003' or `^C' form.            /* Translate control characters into `\003' or `^C' form.
# Line 4916  get_next_display_element (it) Line 4926  get_next_display_element (it)
4926                   IT->ctl_chars with glyphs for what we have to                   IT->ctl_chars with glyphs for what we have to
4927                   display.  Then, set IT->dpvec to these glyphs.  */                   display.  Then, set IT->dpvec to these glyphs.  */
4928                GLYPH g;                GLYPH g;
4929                  int ctl_len;
4930                  int face_id = escape_glyph_face;
4931    
4932                  /* Find the face id if `escape-glyph' unless we recently did.  */
4933                  if (face_id < 0)
4934                    {
4935                      Lisp_Object tem = Fget (Qescape_glyph, Qface);
4936                      if (INTEGERP (tem))
4937                        face_id = XINT (tem);
4938                      else
4939                        face_id = 0;
4940                      /* If there's overflow, use 0 instead.  */
4941                      if (FAST_GLYPH_FACE (FAST_MAKE_GLYPH (0, face_id)) != face_id)
4942                        face_id = 0;
4943                      escape_glyph_face = face_id;
4944                    }
4945    
4946                if (it->c < 128 && it->ctl_arrow_p)                if (it->c < 128 && it->ctl_arrow_p)
4947                  {                  {
# Line 4925  get_next_display_element (it) Line 4951  get_next_display_element (it)
4951                        && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (it->dp))))                        && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (it->dp))))
4952                      g = XINT (DISP_CTRL_GLYPH (it->dp));                      g = XINT (DISP_CTRL_GLYPH (it->dp));
4953                    else                    else
4954                      g = FAST_MAKE_GLYPH ('^', 0);                      g = FAST_MAKE_GLYPH ('^', face_id);
4955                    XSETINT (it->ctl_chars[0], g);                    XSETINT (it->ctl_chars[0], g);
4956    
4957                    g = FAST_MAKE_GLYPH (it->c ^ 0100, 0);                    g = FAST_MAKE_GLYPH (it->c ^ 0100, face_id);
4958                    XSETINT (it->ctl_chars[1], g);                    XSETINT (it->ctl_chars[1], g);
4959                      ctl_len = 2;
                   /* Set up IT->dpvec and return first character from it.  */  
                   it->dpvec_char_len = it->len;  
                   it->dpvec = it->ctl_chars;  
                   it->dpend = it->dpvec + 2;  
                   it->current.dpvec_index = 0;  
                   it->method = next_element_from_display_vector;  
                   get_next_display_element (it);  
4960                  }                  }
4961                else                else
4962                  {                  {
# Line 4952  get_next_display_element (it) Line 4971  get_next_display_element (it)
4971                        && GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp))))                        && GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp))))
4972                      escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp));                      escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp));
4973                    else                    else
4974                      escape_glyph = FAST_MAKE_GLYPH ('\\', 0);                      escape_glyph = FAST_MAKE_GLYPH ('\\', face_id);
4975    
4976                    if (SINGLE_BYTE_CHAR_P (it->c))                    if (SINGLE_BYTE_CHAR_P (it->c))
4977                      str[0] = it->c, len = 1;                      str[0] = it->c, len = 1;
# Line 4979  get_next_display_element (it) Line 4998  get_next_display_element (it)
4998                        XSETINT (it->ctl_chars[i * 4], escape_glyph);                        XSETINT (it->ctl_chars[i * 4], escape_glyph);
4999                        /* Insert three more glyphs into IT->ctl_chars for                        /* Insert three more glyphs into IT->ctl_chars for
5000                           the octal display of the character.  */                           the octal display of the character.  */
5001                        g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0', 0);                        g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0',
5002                                               face_id);
5003                        XSETINT (it->ctl_chars[i * 4 + 1], g);                        XSETINT (it->ctl_chars[i * 4 + 1], g);
5004                        g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0', 0);                        g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0',
5005                                               face_id);
5006                        XSETINT (it->ctl_chars[i * 4 + 2], g);                        XSETINT (it->ctl_chars[i * 4 + 2], g);
5007                        g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0);                        g = FAST_MAKE_GLYPH ((str[i] & 7) + '0',
5008                                               face_id);
5009                        XSETINT (it->ctl_chars[i * 4 + 3], g);                        XSETINT (it->ctl_chars[i * 4 + 3], g);
5010                      }                      }
5011                      ctl_len = len * 4;
                   /* Set up IT->dpvec and return the first character  
                      from it.  */  
                   it->dpvec_char_len = it->len;  
                   it->dpvec = it->ctl_chars;  
                   it->dpend = it->dpvec + len * 4;  
                   it->current.dpvec_index = 0;  
                   it->method = next_element_from_display_vector;  
                   get_next_display_element (it);  
5012                  }                  }
5013    
5014                  /* Set up IT->dpvec and return first character from it.  */
5015                  it->dpvec_char_len = it->len;
5016                  it->dpvec = it->ctl_chars;
5017                  it->dpend = it->dpvec + ctl_len;
5018                  it->current.dpvec_index = 0;
5019                  it->saved_face_id = it->face_id;
5020                  it->method = next_element_from_display_vector;
5021                  goto get_next;
5022              }              }
5023          }          }
5024    
# Line 5185  set_iterator_to_next (it, reseat_p) Line 5208  set_iterator_to_next (it, reseat_p)
5208                 && IT_STRING_CHARPOS (*it) >= 0));                 && IT_STRING_CHARPOS (*it) >= 0));
5209  }  }
5210    
   
5211  /* Load IT's display element fields with information about the next  /* Load IT's display element fields with information about the next
5212     display element which comes from a display table entry or from the     display element which comes from a display table entry or from the
5213     result of translating a control character to one of the forms `^C'     result of translating a control character to one of the forms `^C'
5214     or `\003'.  IT->dpvec holds the glyphs to return as characters.  */     or `\003'.
5215    
5216       IT->dpvec holds the glyphs to return as characters.
5217       IT->saved_face_id holds the face id before the display vector--
5218       it is restored into IT->face_idin set_iterator_to_next.  */
5219    
5220  static int  static int
5221  next_element_from_display_vector (it)  next_element_from_display_vector (it)
# Line 5198  next_element_from_display_vector (it) Line 5224  next_element_from_display_vector (it)
5224    /* Precondition.  */    /* Precondition.  */
5225    xassert (it->dpvec && it->current.dpvec_index >= 0);    xassert (it->dpvec && it->current.dpvec_index >= 0);
5226    
   /* Remember the current face id in case glyphs specify faces.  
      IT's face is restored in set_iterator_to_next.  */  
   it->saved_face_id = it->face_id;  
   
5227    if (INTEGERP (*it->dpvec)    if (INTEGERP (*it->dpvec)
5228        && GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec)))        && GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec)))
5229      {      {
# Line 5385  next_element_from_ellipsis (it) Line 5407  next_element_from_ellipsis (it)
5407       struct it *it;       struct it *it;
5408  {  {
5409    if (it->selective_display_ellipsis_p)    if (it->selective_display_ellipsis_p)
5410      {      setup_for_ellipsis (it, it->len);
       if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))  
         {  
           /* Use the display table definition for `...'.  Invalid glyphs  
              will be handled by the method returning elements from dpvec.  */  
           struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));  
           it->dpvec_char_len = it->len;  
           it->dpvec = v->contents;  
           it->dpend = v->contents + v->size;  
           it->current.dpvec_index = 0;  
           it->method = next_element_from_display_vector;  
         }  
       else  
         {  
           /* Use default `...' which is stored in default_invis_vector.  */  
           it->dpvec_char_len = it->len;  
           it->dpvec = default_invis_vector;  
           it->dpend = default_invis_vector + 3;  
           it->current.dpvec_index = 0;  
           it->method = next_element_from_display_vector;  
         }  
     }  
5411    else    else
5412      {      {
5413        /* The face at the current position may be different from the        /* The face at the current position may be different from the
# Line 11600  redisplay_window (window, just_this_one_ Line 11601  redisplay_window (window, just_this_one_
11601    *w->desired_matrix->method = 0;    *w->desired_matrix->method = 0;
11602  #endif  #endif
11603    
11604      /* Force this to be looked up again for each redisp of each window.  */
11605      escape_glyph_face = -1;
11606    
11607    specbind (Qinhibit_point_motion_hooks, Qt);    specbind (Qinhibit_point_motion_hooks, Qt);
11608    
11609    reconsider_clip_changes (w, buffer);    reconsider_clip_changes (w, buffer);
# Line 14532  highlight_trailing_whitespace (f, row) Line 14536  highlight_trailing_whitespace (f, row)
14536                    && glyph->u.ch == ' '))                    && glyph->u.ch == ' '))
14537            && trailing_whitespace_p (glyph->charpos))            && trailing_whitespace_p (glyph->charpos))
14538          {          {
14539            int face_id = lookup_named_face (f, Qtrailing_whitespace, 0);            int face_id = lookup_named_face (f, Qtrailing_whitespace, 0, 0);
14540              if (face_id < 0)
14541                return;
14542    
14543            while (glyph >= start            while (glyph >= start
14544                   && BUFFERP (glyph->object)                   && BUFFERP (glyph->object)
# Line 14625  display_line (it) Line 14631  display_line (it)
14631       hscrolled.  This may stop at an x-position < IT->first_visible_x       hscrolled.  This may stop at an x-position < IT->first_visible_x
14632       if the first glyph is partially visible or if we hit a line end.  */       if the first glyph is partially visible or if we hit a line end.  */
14633    if (it->current_x < it->first_visible_x)    if (it->current_x < it->first_visible_x)
14634      move_it_in_display_line_to (it, ZV, it->first_visible_x,      {
14635                                  MOVE_TO_POS | MOVE_TO_X);        move_it_in_display_line_to (it, ZV, it->first_visible_x,
14636                                      MOVE_TO_POS | MOVE_TO_X);
14637        }
14638    
14639    /* Get the initial row height.  This is either the height of the    /* Get the initial row height.  This is either the height of the
14640       text hscrolled, if there is any, or zero.  */       text hscrolled, if there is any, or zero.  */
# Line 14955  display_line (it) Line 14963  display_line (it)
14963                  {                  {
14964                    if (!get_next_display_element (it))                    if (!get_next_display_element (it))
14965                      {                      {
 #ifdef HAVE_WINDOW_SYSTEM  
14966                        it->continuation_lines_width = 0;                        it->continuation_lines_width = 0;
14967                        row->ends_at_zv_p = 1;                        row->ends_at_zv_p = 1;
14968                        row->exact_window_width_line_p = 1;                        row->exact_window_width_line_p = 1;
14969                        break;                        break;
 #endif /* HAVE_WINDOW_SYSTEM */  
14970                      }                      }
14971                    if (ITERATOR_AT_END_OF_LINE_P (it))                    if (ITERATOR_AT_END_OF_LINE_P (it))
14972                      {                      {
# Line 18269  draw_glyphs (w, x, row, area, start, end Line 18275  draw_glyphs (w, x, row, area, start, end
18275    return x_reached;    return x_reached;
18276  }  }
18277    
18278    /* Expand row matrix if too narrow.  Don't expand if area
18279       is not present.  */
18280    
18281    #define IT_EXPAND_MATRIX_WIDTH(it, area)                \
18282      {                                                     \
18283        if (!fonts_changed_p                                \
18284            && (it->glyph_row->glyphs[area]                 \
18285                < it->glyph_row->glyphs[area + 1]))         \
18286          {                                                 \
18287            it->w->ncols_scale_factor++;                    \
18288            fonts_changed_p = 1;                            \
18289          }                                                 \
18290      }
18291    
18292  /* Store one glyph for IT->char_to_display in IT->glyph_row.  /* Store one glyph for IT->char_to_display in IT->glyph_row.
18293     Called from x_produce_glyphs when IT->glyph_row is non-null.  */     Called from x_produce_glyphs when IT->glyph_row is non-null.  */
# Line 18306  append_glyph (it) Line 18325  append_glyph (it)
18325        glyph->font_type = FONT_TYPE_UNKNOWN;        glyph->font_type = FONT_TYPE_UNKNOWN;
18326        ++it->glyph_row->used[area];        ++it->glyph_row->used[area];
18327      }      }
18328    else if (!fonts_changed_p)    else
18329      {      IT_EXPAND_MATRIX_WIDTH (it, area);
       it->w->ncols_scale_factor++;  
       fonts_changed_p = 1;  
     }  
18330  }  }
18331    
18332  /* Store one glyph for the composition IT->cmp_id in IT->glyph_row.  /* Store one glyph for the composition IT->cmp_id in IT->glyph_row.
# Line 18348  append_composite_glyph (it) Line 18364  append_composite_glyph (it)
18364        glyph->font_type = FONT_TYPE_UNKNOWN;        glyph->font_type = FONT_TYPE_UNKNOWN;
18365        ++it->glyph_row->used[area];        ++it->glyph_row->used[area];
18366      }      }
18367    else if (!fonts_changed_p)    else
18368      {      IT_EXPAND_MATRIX_WIDTH (it, area);
       it->w->ncols_scale_factor++;  
       fonts_changed_p = 1;  
     }  
18369  }  }
18370    
18371    
# Line 18522  produce_image_glyph (it) Line 18535  produce_image_glyph (it)
18535            glyph->font_type = FONT_TYPE_UNKNOWN;            glyph->font_type = FONT_TYPE_UNKNOWN;
18536            ++it->glyph_row->used[area];            ++it->glyph_row->used[area];
18537          }          }
18538        else if (!fonts_changed_p)        else
18539          {          IT_EXPAND_MATRIX_WIDTH (it, area);
           it->w->ncols_scale_factor++;  
           fonts_changed_p = 1;  
         }  
18540      }      }
18541  }  }
18542    
# Line 18570  append_stretch_glyph (it, object, width, Line 18580  append_stretch_glyph (it, object, width,
18580        glyph->font_type = FONT_TYPE_UNKNOWN;        glyph->font_type = FONT_TYPE_UNKNOWN;
18581        ++it->glyph_row->used[area];        ++it->glyph_row->used[area];
18582      }      }
18583    else if (!fonts_changed_p)    else
18584      {      IT_EXPAND_MATRIX_WIDTH (it, area);
       it->w->ncols_scale_factor++;  
       fonts_changed_p = 1;  
     }  
18585  }  }
18586    
18587    
# Line 18805  calc_line_height_property (it, prop, fon Line 18812  calc_line_height_property (it, prop, fon
18812        struct face *face;        struct face *face;
18813        struct font_info *font_info;        struct font_info *font_info;
18814    
18815        face_id = lookup_named_face (it->f, face_name, ' ');        face_id = lookup_named_face (it->f, face_name, ' ', 0);
18816        if (face_id < 0)        if (face_id < 0)
18817          return make_number (-1);          return make_number (-1);
18818    
# Line 20117  erase_phys_cursor (w) Line 20124  erase_phys_cursor (w)
20124      {      {
20125        int x, y;        int x, y;
20126        int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);        int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
20127          int width;
20128    
20129        cursor_glyph = get_phys_cursor_glyph (w);        cursor_glyph = get_phys_cursor_glyph (w);
20130        if (cursor_glyph == NULL)        if (cursor_glyph == NULL)
# Line 20124  erase_phys_cursor (w) Line 20132  erase_phys_cursor (w)
20132    
20133        x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);        x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
20134        y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y));        y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y));
20135          width = min (cursor_glyph->pixel_width,
20136                       window_box_width (w, TEXT_AREA) - w->phys_cursor.x);
20137    
20138        rif->clear_frame_area (f, x, y,        rif->clear_frame_area (f, x, y, width, cursor_row->visible_height);
                              cursor_glyph->pixel_width, cursor_row->visible_height);  
20139      }      }
20140    
20141    /* Erase the cursor by redrawing the character underneath it.  */    /* Erase the cursor by redrawing the character underneath it.  */
# Line 20947  note_mode_line_or_margin_highlight (w, x Line 20956  note_mode_line_or_margin_highlight (w, x
20956        /* If we're on a string with `help-echo' text property, arrange        /* If we're on a string with `help-echo' text property, arrange
20957           for the help to be displayed.  This is done by setting the           for the help to be displayed.  This is done by setting the
20958           global variable help_echo_string to the help string.  */           global variable help_echo_string to the help string.  */
20959        help = Fget_text_property (pos, Qhelp_echo, string);        if (NILP (help))
       if (!NILP (help))  
20960          {          {
20961            help_echo_string = help;            help = Fget_text_property (pos, Qhelp_echo, string);
20962            XSETWINDOW (help_echo_window, w);            if (!NILP (help))
20963            help_echo_object = string;              {
20964            help_echo_pos = charpos;                help_echo_string = help;
20965                  XSETWINDOW (help_echo_window, w);
20966                  help_echo_object = string;
20967                  help_echo_pos = charpos;
20968                }
20969          }          }
20970    
20971        if (NILP (pointer))        if (NILP (pointer))
# Line 22159  syms_of_xdisp () Line 22171  syms_of_xdisp ()
22171    staticpro (&Qfontification_functions);    staticpro (&Qfontification_functions);
22172    Qtrailing_whitespace = intern ("trailing-whitespace");    Qtrailing_whitespace = intern ("trailing-whitespace");
22173    staticpro (&Qtrailing_whitespace);    staticpro (&Qtrailing_whitespace);
22174      Qescape_glyph = intern ("escape-glyph");
22175      staticpro (&Qescape_glyph);
22176    Qimage = intern ("image");    Qimage = intern ("image");
22177    staticpro (&Qimage);    staticpro (&Qimage);
22178    QCmap = intern (":map");    QCmap = intern (":map");

Legend:
Removed from v.1.754.2.39  
changed lines
  Added in v.1.754.2.40

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26