1 new commit in XEmacs:
https://bitbucket.org/xemacs/xemacs/changeset/b6c506c30f93/
changeset: b6c506c30f93
user: kehoea
date: 2012-10-14 17:14:25
summary: Respect face and display table information for the minibuffer prompt.
src/ChangeLog addition:
2012-10-14 Aidan Kehoe <kehoea(a)parhasard.net>
Respect face and display table information in the minibuffer
prompt. Thanks for the bug report, Nelson Ferreira!
* redisplay.c (struct prop_block):
Add entries representing the minibuffer prompt explicitly to the
union here.
* redisplay.c (add_propagation_runes):
Respect the face and the display table for the minibuffer prompt
here.
* redisplay.c (regenerate_window):
Use the new union members when passing the minibuffer prompt info
to add_propagation_runes().
affected #: 2 files
diff -r 965a9ddc915a9a300afedd57e4bd43d69ea4f2d0 -r
b6c506c30f93e8b9f06c6b9e5d6d0dcc9cd3f5c3 src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,17 @@
+2012-10-14 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ Respect face and display table information in the minibuffer
+ prompt. Thanks for the bug report, Nelson Ferreira!
+ * redisplay.c (struct prop_block):
+ Add entries representing the minibuffer prompt explicitly to the
+ union here.
+ * redisplay.c (add_propagation_runes):
+ Respect the face and the display table for the minibuffer prompt
+ here.
+ * redisplay.c (regenerate_window):
+ Use the new union members when passing the minibuffer prompt info
+ to add_propagation_runes().
+
2012-09-16 Aidan Kehoe <kehoea(a)parhasard.net>
* editfns.c (Fformat_time_string):
diff -r 965a9ddc915a9a300afedd57e4bd43d69ea4f2d0 -r
b6c506c30f93e8b9f06c6b9e5d6d0dcc9cd3f5c3 src/redisplay.c
--- a/src/redisplay.c
+++ b/src/redisplay.c
@@ -259,6 +259,12 @@
int width;
Lisp_Object glyph;
} p_glyph;
+
+ struct
+ {
+ Lisp_Object preprompt;
+ Lisp_Object prompt;
+ } p_minibuf_prompt;
} data;
};
@@ -1692,30 +1698,77 @@
{
face_index old_findex = data->findex;
Bytebpos byte_old_charpos = data->byte_charpos;
-
- data->findex = DEFAULT_INDEX;
+ Boolint stop_after = NILP (pb->data.p_minibuf_prompt.preprompt);
+ Lisp_Object str = stop_after ? pb->data.p_minibuf_prompt.prompt
+: pb->data.p_minibuf_prompt.preprompt;
+ struct window *w = XWINDOW (data->window);
+
data->byte_charpos = 0;
data->cursor_type = NO_CURSOR;
- while (pb->data.p_string.len > 0)
- {
- data->ch = itext_ichar (pb->data.p_string.str);
- add_failed = add_ichar_rune (data);
-
- if (add_failed)
- {
- data->findex = old_findex;
- data->byte_charpos = byte_old_charpos;
- goto oops_no_more_space;
+ /* This doesn't handle begin-glyphs and end-glyphs and so on. It
+ may be reasonable not to, given that we're a "propagation
+ glyph", but it's not intuitively clear either way. It is
+ clear that it should handle the face and the display
+ table. */
+
+ while (STRINGP (str))
+ {
+ Ibyte *pstart = XSTRING_DATA (str), *pp = pstart,
+ *pend = pstart + XSTRING_LENGTH (str);
+ struct extent_fragment *ef
+ = extent_fragment_new (str, XFRAME (w->frame));
+
+ while (pp < pend)
+ {
+ Lisp_Object face_dt, window_dt, entry = Qnil;
+ face_index new_findex
+ = data->findex = extent_fragment_update (w, ef,
+ pp - pstart,
+ Qnil);
+
+ data->ch = itext_ichar (pp);
+ get_display_tables (w, new_findex, &face_dt, &window_dt);
+
+ if (!NILP (face_dt) || !NILP (window_dt))
+ {
+ entry = display_table_entry (data->ch, face_dt,
+ window_dt);
+ }
+
+ /* If there is a display table entry for it, hand it off
+ to add_disp_table_entry_runes and let it worry about
+ it. */
+ if (!NILP (entry) && !EQ (entry, make_char (data->ch)))
+ {
+ add_failed = add_disp_table_entry_runes (data, entry);
+ }
+ else
+ {
+ add_failed = add_ichar_rune (data);
+ }
+
+ if (add_failed)
+ {
+ data->findex = old_findex;
+ data->byte_charpos = byte_old_charpos;
+ extent_fragment_delete (ef);
+ goto oops_no_more_space;
+ }
+
+ INC_IBYTEPTR (pp);
}
- else
- {
- /* Complicated equivalent of ptr++, len-- */
- Ibyte *oldpos = pb->data.p_string.str;
- INC_IBYTEPTR (pb->data.p_string.str);
- pb->data.p_string.len -= pb->data.p_string.str - oldpos;
- }
- }
+
+ extent_fragment_delete (ef);
+
+ if (stop_after)
+ {
+ break;
+ }
+
+ str = pb->data.p_minibuf_prompt.prompt;
+ stop_after = 1;
+ }
data->findex = old_findex;
/* ##### FIXME FIXME FIXME -- Upon successful return from
@@ -5523,13 +5576,11 @@
&& start_pos == BUF_BEGV (b))
{
struct prop_block pb;
- Lisp_Object string;
prop = Dynarr_new (prop_block);
- string = concat2 (Vminibuf_preprompt, Vminibuf_prompt);
pb.type = PROP_MINIBUF_PROMPT;
- pb.data.p_string.str = XSTRING_DATA (string);
- pb.data.p_string.len = XSTRING_LENGTH (string);
+ pb.data.p_minibuf_prompt.preprompt = Vminibuf_preprompt;
+ pb.data.p_minibuf_prompt.prompt = Vminibuf_prompt;
Dynarr_add (prop, pb);
}
else
Repository URL:
https://bitbucket.org/xemacs/xemacs/
--
This is a commit notification from
bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches